Hacker News Comments on
Artificial intelligence, video games and the mysteries of the mind | Raia Hadsell | TEDxExeterSalon
TEDx Talks
·
Youtube
·
10
HN points
·
2
HN comments
- This course is unranked · view top recommended courses
Hacker News Stories and Comments
All the comments and stories posted to Hacker News that reference this video.# First TopicThe idea would be to be able to write something like this:
The parser should stop interpreting arguments after the yt function call and pass the args as strings to the function as before.function yt --pure youtube-dl $argv end
Then such a call would be possible: yt https://www.youtube.com/watch?v=mqma6GpM7vM
# Second Topic
I wrote a little utility [1] to quicker navigate on the file system. Right now I have two commands:
I would like to be able to write 'm foobar' and then press tab to get a vertical completion-list. When the user selects a completion-list-item I would like to pass the result-path to the cd command. Some time ago I tried to write such a completion, but failed – that's why I still use a separate mm-function to list search results.m [folder] // goto highest ranked folder mm [folder] // list results for folder-keyword
[1]: https://github.com/thibran/maybe
I think JSON might be a good choice here because it would simplify the interaction with the completion program for advanced completions. Passing all those flags – mixed with some other shell function calls – to the 'complete' program is a bit cumbersome. My dream would be to have something like 'complete -c maybe --json [maybe-flag-to-generate-json-output]' and handle everything inside the application.
I know JSON is not something you want to assemble in a script, but all programming languages have support for it and it's easy to use.{ "fish_completion_version": 1, "header": "optional, completion header", "orientation": "vertical", "on_single_result": "optional, choose-item or display-item", "arguments": [ { "item", "description", "optional return value, if empty return item" }], "item_handler": "optional, name of fish function to call on-item-chosen" }
⬐ faho>Then such a call would be possible: yt https://www.youtube.com/watch?v=mqma6GpM7vMOkay, so I did understand what you are saying.
Like I said, that's a rather large layering violation, since the function has nothing to do with the expansions happening on its arguments. They are expanded before they ever reach the function. It's essentially allowing functions to modify the syntax around them.
How exactly would this treat e.g.
Would the variable still be expanded? Would an asterisk glob be? If I _did_ want it to expand something even though the function is declared "pure", how would that work?yt $URL/somefile
Now I couldn't be sure how my arguments would be interpreted, or I'd have to go checking for everything I invoke.
I use youtube-dl myself quite often, and what I do is just type
then press ctrl-v (which is a keybinding that uses xsel or pbpaste to get the clipboard contents and insert them into the commandline) or ctrl-shift-v (which is my terminal's paste binding). Then I press `'` again and can download the video.youtube-dl '
Additionally, it's looking like 3.0 will remove the `?` glob, which is the thing that is most annoying with URLs (though "&" is also a thing).
> I would like to be able to write 'm foobar' and then press tab to get a vertical completion-list. When the user selects a completion-list-item I would like to pass the result-path to the cd command.
I would assume the reason you failed is that the argument you want doesn't match the argument the user typed. Because fish's completions undergo filtering (with some fuzzy-matching, so e.g. `f_c_i` matches `fish_config_interactive`). Otherwise every completion script would have to implement that by itself, and consistently to not confuse people.
For completions, that's the right thing to do.
What you want, I'd argue, isn's a completion. What you want is a selection menu. Which could be implemented with fish's completion pager (we have an open issue about making it accessible to the outside), but isn't the same thing.
JSON here is a red herring, since you don't just want to add items (with descriptions), but also control the behavior of the pager ("orientation" and "on_single_result"). That you could do just with arguments to this `select` command (`list_of_items | select --orientation=vertical --on-single=choose`).
⬐ thibran> How exactly would this treat e.g.> Would the variable still be expanded? Would an asterisk glob be?yt $URL/somefile
No. Pure should mean don't do anything from here on, just pass the arguments to the function.
> If I _did_ want it to expand something even though the function is declared "pure", how would that work?
If expanding should be possible in a pure context, then maybe by using a known syntax like:
Eshell expands Lisp code when using (lisp-code-here) which is kind of elegant. So when in a pure context, you would have to switch to expansion-mode by using curly braces.yt ($URL)/somefile