00:05 welcome 00:06 to another episode of star talk show 00:09 today is 2021 00:11 april uh april 20th and today we are 00:16 going to continue 00:18 our journey yesterday doing emacs lisp 00:22 we are going to look at the source code 00:25 of hellmod and see how it 00:28 uh implements first imagine 00:31 okay so that is what we are going to do 00:35 so it's going to be very technical uh 00:37 it's all about 00:38 emac this code it's probably going to be 00:41 boring 00:42 unless you want to uh if you are 00:46 already a emac this programmer and 00:50 also if you want to see kind of actual 00:53 real-life workflow 00:55 of you know coding e-mag beast 00:58 so otherwise it's probably going to be 01:00 boring for you 01:01 so i'm going i'm going to go pretty fast 01:04 uh 01:04 and uh if you have questions about emacs 01:08 related to what 01:09 i'm doing uh just post in the comments 01:12 okay 01:13 so on the on the left window the pink 01:15 window is uh 01:16 my all my emacs command circle such as 01:19 moving cursor 01:20 down up or back paragraph and so on 01:23 or dd delete or undo undo 01:27 and you can also see the keystrokes and 01:30 i'm using 01:30 soft light keys and i'm using a vora 01:33 keyboard 01:34 okay let me begin then okay video good 01:37 audio good check 01:40 so let's begin let's begin to um 01:44 code these okay so last time 01:47 uh what's going on okay hold on a second 01:50 so 01:50 show uh this is today's 01:54 uh yeah talk show so uh let me show you 01:57 so last time we did 02:01 uh so there's two episodes you know uh 02:03 yesterday and the day before 02:05 so we wrote this function select choices 02:08 and 02:08 when you call it it has a bunch of 02:12 predefined sentences 02:13 these are academic phrases potentially 02:17 there are thousands of them 02:19 so here's just a short example so when 02:21 you call this command you can type uh 02:23 you know show a few characters then you 02:26 will narrow down 02:28 you know the the sentence you want uh 02:32 speed up writing academic papers 02:35 so here is a one simple implementation 02:39 uh very simple just uh 02:42 10 lines uh so you can see 02:45 so if we call it so i'm gonna evaluate 02:48 it 02:49 call it select choices enter then you 02:52 can see i have several choices 02:54 so i if i type uh 02:57 for example if i type e 03:00 let's say e e o 03:03 e e o okay so there's a lot of sentences 03:08 that matches this 03:10 so i'm looking at this one e e o 03:13 e let's type another e okay 03:16 and let's type p so it narrows down 03:21 uh so this so narrow down so i press 03:24 enter 03:24 and it inserts that sentence now this 03:28 first imagine is based on i do so 03:31 i do completing read which is a 03:33 character based 03:34 first imagine that is whatever you type 03:37 is considered a sequence of characters 03:40 now in order okay older sequence of 03:43 characters 03:44 and if any of these candidate sentences 03:48 contains that sequence of characters in 03:50 order 03:51 then that's a potential candidate 03:56 so this is idol's version of first 03:58 imagine 03:59 but however helm is using a different 04:02 way 04:03 it's a word based uh first imagine and 04:07 order does not matter for example we can 04:10 call 04:12 helm mx okay call helm mx 04:15 enter so we you know we got a bunch of 04:19 uh uh candidates for emacs commands 04:23 and uh as you know you know we defined 04:26 so one of our command is 04:27 select choices we just defined so we can 04:29 type 04:32 for example if we type 04:36 s c okay the first character of each 04:41 word 04:41 sc then you don't see 04:45 you know then it eliminates this 04:47 candidate because 04:49 because helms first imagine is based on 04:52 words 04:53 so this command name does not contain 04:55 the word s 04:56 c so that doesn't work okay so but 04:59 it's word based okay but so try it again 05:02 help meta x 05:03 so if we type 05:06 uh if we type 05:09 choices you see now we have 05:12 we actually got what we want now we type 05:15 choices 05:16 then we type space then we type select 05:19 sel 05:22 again so so you see uh 05:25 enter so now it calls our command 05:28 now i can you know i can now i can make 05:30 a choice type to make a choice so 05:32 so helm's first imaging is word based 05:36 and and order does not matter now our 05:39 job today 05:40 is to continue to look at the helm 05:42 source code to see how it is done 05:45 and so that at the end we we want to 05:47 modify 05:48 our code to use helm's first imaging 05:51 system 05:52 if we are successful okay so here 05:55 so we we start from where we left off 05:58 yesterday 06:00 uh so we trace the core stack you know 06:04 we trace the function 06:05 helm mx you know we look at the source 06:08 code 06:10 and helm mx turns out calls 06:13 helm mx read extended command to do the 06:16 job 06:16 then that in turn calls helm to do the 06:19 job 06:20 uh it's called like that and that in 06:23 turn 06:24 cause helm internal to do the job 06:28 uh and the helm internal has this syntax 06:31 okay 06:32 then then at that point 06:36 it seems to you know it caused helm read 06:38 from mini buffer 06:40 but from what i know uh you know 06:44 since we looked at yesterday it also 06:46 sets a bunch of variables or 06:49 uh yeah variables that 06:53 that contains information about what's 06:56 the current state like 06:57 what like what what is the current uh 07:01 string user has typed and what is the 07:04 current 07:04 um pattern and current 07:08 uh choices narrow down choices i think 07:12 that's how it works so i don't know yet 07:14 so that's how 07:15 that's where we were yesterday 07:19 okay so we i'm going to continue okay so 07:21 this is mostly just me working on this 07:24 um it's gonna i i suspect it's going to 07:28 be long for 07:28 an hour or more uh tedious job 07:32 okay so i mean yeah we are looking at 07:34 the emacs source code to 07:37 yeah so okay so so first of all okay 07:40 let's describe function buffer 07:44 let's go to the um 07:47 the source code okay now 07:51 now let's look at the helms package 07:53 structure okay 07:55 so you see so 07:58 helm has a package called a directory 08:00 called helmcore 08:02 and it contains let's see basically 08:06 we can ignore the first two because 08:07 those are uh auto created package info 08:11 so the main code is one two 08:14 three four four 08:17 files and the primary primary one 08:21 is the helm dot el so we open helm dot 08:25 and that is 7000 08:28 lines of code and we yesterday we looked 08:32 at all the functions in it 08:34 so we call describe matching i mean 08:37 these matching lines 08:39 type defend and you see 08:43 it returns 290 functions 08:48 and we looked at this so we have we 08:51 yesterday we got idea of what are these 08:53 functions are this is a helm co 08:55 okay helm ko and part of it 08:59 let's see where part of it contains the 09:02 first imagine 09:06 i mean we determined part of it i mean 09:08 many of these functions are related to 09:11 uh first imagine so you see starting 09:14 here 09:15 so fuzzy helm first imagine maybe 09:18 something 09:19 hem fuzzy match hem fuzzy search helm 09:22 score candidate for pattern and so on 09:24 they are like 09:25 15 or 10 or 15 uh functions related to 09:30 matching string so anyway let i'm giving 09:34 you i mean i'm trying to uh 09:36 you know to cons to 09:39 to to to know the structure of helm 09:42 uh at this moment so you have helm 09:46 core directory but actually 09:50 there's more so we go up one directory 09:52 we go up one directory you can see helm 09:55 that's the okay so that's the helm code 09:58 wait 09:59 yeah so helm call is this one so in fact 10:02 there is another directory just 10:04 named helm so helm 10:07 the package helm apparently you know uh 10:10 contains two directories one is home 10:12 call which i suppose 10:14 is the the heart of the engine helm uh 10:17 you know for the matching engine then 10:20 you have 10:21 uh the helm directory which 10:24 contains let's see you know uh 10:28 helm adaptive helm auto load handbook 10:31 mark helpful first hand color 10:34 helm commit uh helm command 10:37 helm config helm dab abbrev 10:42 helm easy menu helm elise 10:46 so i suppose so so these are commands 10:51 uh for various for example if you want 10:54 to open a file 10:55 or if you want to open a you know call 10:58 home to 10:59 if you want to call external command or 11:02 if you 11:02 are in emac this shell you want to call 11:06 some 11:06 evs shell uh functions 11:09 or if you are you know and some of them 11:12 create menus so these are a bunch of 11:15 commands and 11:19 that 11:22 that user actually call help so i 11:25 so i imagine these commands you know 11:28 contained in these files 11:29 they ultimately will call some function 11:32 in helm code to do the work 11:34 okay so i haven't looked at this what 11:36 are these are 11:38 so there's also helm semantic so what 11:40 the 11:41 hell is helm semantic author danielle 11:43 hackney 11:46 uh okay i know so these people 11:49 are developers of helm 11:55 okay so now i'm going to put on my egg 11:58 eye patch because i have a little bit 12:02 cross-eyed 12:03 so uh since i was young so i put a 12:06 eye patch i'm wearing two glasses 12:08 because one is nearsightedness one is 12:10 the 12:11 old age reading glasses i need to get 12:15 better glasses 12:17 so okay so so back to the structure of 12:20 helm uh two directories okay 12:22 two directories one is helmcore and one 12:24 is a bunch of 12:25 helm commands uh and utilities and stuff 12:30 so what is helm semantic just for 12:32 curiosity let's see 12:34 uh require semantic okay i don't know 12:37 what 12:38 package is semantic helm help help a 12:40 menu 12:44 uh you see a documentation no now so 12:48 i'm also wondering um if there is a 12:51 documentation for programmers for health 12:54 you know for people who wants to you 12:56 know contribute to help 13:00 so you know we are just you know this is 13:02 part of process of looking 13:04 studying you know the source code so if 13:06 i you know it's always a gamble which 13:08 direction you go if i spend the next 13:10 10 minutes to look to look search for 13:12 the documentation 13:14 you know whether if there's one for 13:16 programmers then 13:18 maybe it's a dead end maybe not uh so 13:22 it's you know you don't know 13:24 so anyway let's look at helm call okay 13:26 so so 13:27 uh yeah so helm call and this is the 13:30 main file so what are the others 13:32 so how i'm called this is the engine 13:36 helm dot el then helm lib i'm not sure 13:38 what 13:39 what's in helm lib so 13:42 it's coded by theory 13:45 uh pro piatto 13:48 uh italian or something 13:52 okay so there is no documentation for 13:56 programmers okay common commentary or 13:58 helm functions that don't require 14:00 specific helm code 14:02 should go go here okay so 14:05 this file helm lib dot el 14:08 is all hand functions that don't require 14:12 specific 14:13 helm code 14:18 okay it doesn't require specific helm 14:20 code 14:23 in helm.el i suppose 14:28 okay so let's see declare functions 14:32 declare functions and see color declare 14:35 functions 14:42 and define var 14:45 okay helm sources now sources mean just 14:49 a list of candidates 14:51 helm initial frame helm current position 14:54 helm 14:56 uh right diode old 14:59 marks okay helm has um you know 15:04 helm is trying to change the user 15:07 interface of emacs which i don't 15:10 i don't really use 15:14 okay so so so okay let's continue uh 15:17 let's 15:17 not get distracted so continue the 15:20 source code so helm 15:21 buffer in new frame helm completion 15:24 style helm completion style at least 15:28 at least associate list helm persistent 15:32 action window buffer 15:33 persistent action window buffer 15:35 completion 15:36 flex no space okay so that's 15:40 a kind of a settings 15:43 so because otherwise space functions as 15:45 a separator 15:47 of words in user input i believe 15:52 so how big is this uh file 15:56 okay 1700 lines 16:00 okay uh now okay now let's 16:03 let's uh search for different so let's 16:06 see 16:07 so there are these matching lines there 16:10 are 92 16:11 functions defined in this file 16:16 so let's look at them helm help 16:23 you know i actually never used helm 16:25 before 16:26 so another option is for me actually to 16:29 [Music] 16:30 to kind of read up the helm 16:32 documentation for users 16:34 to see uh 16:37 to see if there is kind you know to to 16:40 become 16:41 to have a solid uh knowledge about how 16:46 how you use helm in general i i i think 16:49 i do know 16:51 basically you open a file or 16:54 you want to call any command or you want 16:56 to search string 16:58 helm you know pops up two buffers 17:02 in a mini buffer is where you type but 17:05 helm 17:05 updates another buffer which is the 17:07 candidate as you type in narrow 17:10 down the candidate so i believe this is 17:13 the 17:14 general pattern of using helm 17:17 so so therefore 17:21 for the code there must be some code 17:23 that update 17:24 the you know so we are looking at we are 17:26 seeing 17:27 i believe some of these variables you 17:30 see for example 17:31 helm sources is continuously updated 17:34 as user types that's the list of 17:36 candidates i believe 17:39 and then you have you know helm buffer 17:42 is the 17:42 interface buffer that contains the 17:45 candidates 17:50 yeah because i believe so i don't know 17:52 for sure yet okay 17:54 so so we have a lot to do you know 17:57 i can try to scan 18:01 the helm's user documentation just to 18:04 get idea you know 18:06 do that for a few minutes and also try 18:08 to look for 18:10 if there's a documentation for helm 18:12 programmers 18:15 so that would be if there exists 18:18 that would be good because then i i can 18:22 instead of guessing i can know how helm 18:24 is done 18:25 the whole structure 18:28 okay helm lib or i mean 18:32 or we just continue with we uh where i 18:35 am you know look at the source code 18:37 so let's start let's keep looking at the 18:39 source code so helm lib 18:41 is 18:45 helmlib is still 18:49 part of the helm core but 18:53 not the essence of the core i believe 18:56 [Music] 18:58 let's see what is helm window 19:01 helm window okay window of helm buffer 19:03 okay yeah so 19:05 so yeah so in emacs terminology a window 19:09 basically just a 19:11 split pen exactly so helm window is the 19:15 is the pen that shows the helms 19:17 candidates 19:18 okay so this function helm window get 19:21 buffer window helm buffer get 19:23 okay so it returns the helm buffer 19:26 and and help buffer is you know is the 19:30 candidates list of candidates so 19:34 help action window window of helm action 19:36 buffer okay i don't know what that is 19:40 okay so these are a bunch of um 19:43 [Music] 19:45 helper functions so you also have help 19:48 describe function 19:50 which is helms basically helms 19:53 wrapper version of emacs describe 19:56 function 19:57 let's try how that works okay so let's 20:01 call 20:02 helm describe function 20:07 oh actually so it's not a command it's 20:10 not an interactive command it's a 20:12 function 20:13 uh only called by helm you cannot call 20:15 it yourself 20:18 okay 20:20 so i think you know so far i have not 20:24 turned helmet 20:25 on so that is there a command called 20:27 helm mod 20:28 yes so if i turn it on 20:32 you know i never turned it on before not 20:34 yesterday or the day before 20:36 so if i turn it on i presume what that 20:39 means is that 20:40 it it's going to change all the typical 20:43 emax commands such as describe function 20:47 or meta x you know execute extended 20:50 command 20:51 and open file you know find file 20:55 it will automatically create a wrapper 20:59 or alias to those functions so whenever 21:01 you call those functions 21:02 you are beco you know you use helm 21:06 uh function command instead so i suppose 21:09 that's what 21:11 so before we do you know before we turn 21:14 on helmet let's 21:15 have a look at the 21:18 dock stream so hell mod 21:22 is a auto loaded interactive compile 21:24 list function okay it's bound to 21:26 a menu bar tool something something okay 21:29 helmet optional so do we have a menu bar 21:32 let's see hold on shrink 21:36 uh yes we do we have a menu bar 21:40 help mod 21:45 no you have to turn helm first okay i 21:48 think 21:48 so anyway it's it's bound to this this 21:51 this uh helmet 21:53 toggle generic helm completion right 21:56 uh if called interactively enable help 21:59 mod if argument is positive 22:01 yeah uh all functions in emacs 22:04 that use that use completing read 22:08 or read file name or completion in 22:11 region 22:12 and friends you know and others will use 22:15 helm interface when this mod is turned 22:17 on 22:17 exactly however you can modify this 22:21 behavior for function of your choice 22:23 blah blah blah okay 22:25 uh customization called we okay so 22:28 should i turn it on um 22:30 so wait there's a something about i do 22:33 mod 22:35 do not enable i do everywhere when using 22:38 helm mod 22:39 okay instead of using i do mod 22:42 add the commands where you want to use i 22:45 do to 22:45 okay 22:52 okay so so okay 22:56 so how much if i turn it on then 22:58 everything is gonna be help 23:00 but i can turn it off i think 23:04 uh 23:07 let's try to turn it on okay so let's 23:09 just see what's going on with help 23:11 let's turn on how much so i can get 23:14 uh some sort of experience user 23:17 experience 23:18 and see how helm you know is used 23:22 okay helmet now meta x 23:26 let's see okay now it's getting complex 23:29 because i'm using 23:30 stuff like keys which has its own 23:33 um yeah so it's not calling helm 23:39 let's call find fire okay let let's call 23:42 actually let's call execute extended 23:47 uh command 23:54 okay so this is the meta x 23:59 okay 24:02 do i need to explain that uh okay 24:04 because it's a bit confusing 24:06 oh actually maybe i should just um 24:12 uh okay so so so so 24:16 you see i'm using stuff like keys so 24:20 when i press a key which is actually a 24:24 uh it's cancel okay cancel let me 24:27 explain what's going on so 24:29 you see i'm when i press the key 24:33 a it will call the command xli meta x 24:37 which which will then which will then 24:40 call one of the version of meta x 24:43 you know the default first of all 24:46 execute extended mod 24:47 that's a command that's a default gnu 24:49 emax then you also have helm 24:51 meta x that's a helm version then you 24:54 also have 24:55 uh smacks smex which is another 25:00 package smacks is a package as a 25:03 replacement 25:04 replacement for meta x so it contains 25:08 uh you know another first imaging 25:11 way so currently if i press a 25:14 it is actu actually using smacks i like 25:17 this 25:18 you know i i like the smacks feature i 25:20 do actually doesn't 25:21 support meta x so 25:24 when i press a you know it's 25:28 actually called in the smix version but 25:31 since i turn down hell mod i want to use 25:34 the helms 25:35 meta x so i so i actually i have to call 25:39 i don't know if this works execute 25:44 extended command okay let's try that 25:48 okay it's not using helm's version but 25:50 let's try something else okay so let's 25:53 try 25:53 find fire okay meta x 25:57 find file okay that's a command to open 26:00 a file 26:03 okay it's not it's not 26:06 calling helms version neither so 26:09 we know from these experimentation we 26:13 know that helm is not 26:15 actually creating an alias to these emax 26:19 commands 26:20 so what is it doing 26:23 probably it's just remapping the 26:27 keystrokes 26:28 so for example in emacs in group emacs 26:31 to open a file is ctrl x control 26:35 f that wheel that is mapped let's 26:38 find bound to find file 26:42 so now if i type control x control f 26:44 it's probably bound to 26:46 helm find file probably let's try it 26:49 okay 26:49 describe key contr control 26:52 x control f 26:56 okay actually it's bound to i do find 26:59 fire so what's um 27:02 it's calling i do's version yeah because 27:04 i have i do on 27:07 uh okay so now remember 27:10 helm documentation said said that 27:14 um you know you should 27:17 turn off okay 27:20 what you should turn off i do 27:33 you know it says do not enable i do 27:35 everywhere now i don't know if i have 27:37 that enabled or not 27:39 so let's describe variable to see if 27:41 that's a variable 27:42 the value is new but however i do have i 27:46 do mod on 27:51 i do have i do mod on so does that 27:54 interfere with helm i don't know maybe 27:58 it does not mention it here however 28:04 you know it's it's a there's a 28:06 possibility that 28:07 you know it does interfere 28:10 so so so so let's 28:14 so let's go to my settings and 28:18 let's this uh these matching lines let's 28:20 see if i do have i do 28:22 um everywhere 28:28 okay so here this section is my 28:32 emacs setting for i do mod so i turn it 28:35 on 28:38 and 28:41 so should i turn it off 28:49 because i want to try the helms without 28:51 interference 28:52 so let's turn it off okay it's called i 28:55 do mod 28:57 okay now it's disabled now let's call 29:01 helmet to turn helm on now 29:04 let's describe key control 29:08 x control f 29:12 okay so it runs the command find file 29:14 which is not which which is 29:16 uh gnu emax find file so let's actually 29:19 try it control x control f 29:22 yeah so it's not calling helm's version 29:26 so what does hell mod mean when it says 29:29 you know just use helm's um 29:34 describe function oh okay 29:38 so here is where helm kicks in when you 29:41 describe function when you call the 29:42 command describe function it 29:44 it calls the helmets version 29:47 okay but how does it work let's see 29:50 so normally the key is control h 29:54 f okay so now let's call describe key 29:57 control h f 30:02 okay so it says run runs the command 30:04 describe function okay 30:06 so let's do that ctrl h 30:09 f okay 30:14 there's something fishy going on okay 30:18 cancel okay so cancel okay so 30:22 when you say describe key 30:25 and you type chf 30:29 emax says that key 30:33 runs the command describe function 30:36 but however that's not true i mean 30:40 you know when you call describe function 30:43 let's try it again 30:44 uh describe function okay 30:48 you see this is not 30:51 this is a helm's behavior the helm 30:53 interface this is not 30:55 a gnu emax behavior so 30:59 somehow for you know somehow somewhere 31:03 describe function you know that command 31:07 is actually calling helms version 31:10 uh and i and so i don't know how that is 31:13 done 31:14 possibly by your advice 31:17 you know so in emacs there's this thing 31:19 called advice 31:20 where it lets you change behavior of a 31:23 functional command 31:26 it you know it's a kind of it's a little 31:29 bit more 31:30 complex way of changing things which i 31:32 don't like i never 31:34 use you know advice define advice 31:37 because it confused things 31:39 because right now we are running into 31:40 this issue the very issue 31:43 you know because when i say describe key 31:47 control h k 31:51 then i type control h 31:54 f then e max tell me tells me 31:57 ctrl h f runs the command describe 31:59 function but actually 32:01 it's not because i press ctrl h f 32:05 this is not the behavior of describe 32:07 function this is the behavior of helm's 32:12 version 32:14 okay let's do one more trick okay 32:16 control 32:17 hl it will tell me 32:20 all the commands i typed in the past 32:23 so you see clearly i am calling describe 32:26 function 32:28 but however helm helm somehow 32:32 by what mechanism i do not know 32:34 overrides it 32:37 yeah this is the reason i don't like 32:40 this 32:43 uh you know i don't like this complex 32:46 i don't know how it's done i don't know 32:48 you know i don't 32:50 i don't you know it's not done by a 32:53 simple mechanism so what is a simple 32:55 mechanism 32:56 a simple mechanism to 33:01 to do that you know to launch helm's 33:03 version of things 33:05 is two ways one is you change the key 33:08 binding so 33:09 all emax key binding that's bound to 33:12 describe function is automatically 33:14 changed remapped 33:16 to helm's version you know a function 33:18 name helm described function 33:21 so this way is simple because if you use 33:23 a type you know 33:25 chff see what that is you'll say oh it 33:28 calls 33:29 helm describe function but it's not 33:32 doing that the other way 33:33 simple way is to do a alias 33:36 so basically you create the alias of 33:41 to describe function so when when people 33:44 are called describe function 33:46 it actually the documentation will say 33:48 actually it's 33:49 you know calling you know it's ideas to 33:52 help describe function 33:53 so this way it's also simple because you 33:55 can query it you'll see 33:57 but but right now it's not doing anyone 34:01 you know it's not doing uh it's not 34:04 remapping keys nor is it 34:06 an edius and no 34:09 is it a advice which is a way to 34:12 change your function behavior 34:16 because if it is you will see it in 34:18 documentation but i'm not seeing it so 34:20 let's do it again okay 34:22 describe key control hf you see so 34:26 here's what 34:26 comes up uh 34:31 it does not mention alias it does not 34:33 mention 34:34 advice and it does not mention any 34:37 change of key binding 34:39 you know it's you know it's so 34:46 um 34:48 so unless i'm missing something there's 34:50 something some other simple way i don't 34:52 understand 34:55 you know i don't like you know i don't 34:58 like these 34:58 complex ways to achieve things 35:04 so with what do we do now let's see 35:06 describe let's search for 35:13 yeah you see it has so let's search for 35:16 describe okay 35:17 in this helm dash lib 35:20 list matching lines describe 35:24 so you do have you see helm's version 35:27 helm describe function function 35:28 help describe variable function helm 35:31 describe class 35:33 helm describe function yeah so so you do 35:35 have 35:36 so define custom 35:39 okay let's jump to it 35:43 help describe function function describe 35:45 function okay 35:47 define custom 35:50 uh what what is the second argument of 35:53 described function 35:54 because you see described function here 35:56 so let's describe function 35:59 define custom okay let's see 36:03 symbol in standard okay yeah 36:06 okay okay that that doesn't matter okay 36:10 so 36:12 define custom so so so helm describe 36:16 function function is actually a variable 36:20 whose value should be a function okay 36:25 now where is this set 36:31 a device function called helm describe 36:34 function function home describe function 36:36 okay 36:36 so here is wait uh what 36:43 okay so here it is 36:48 so you do have a helm describe function 36:51 d 36:51 you know that's a function 36:56 you do have that and 37:01 and then it calls help describe function 37:04 function okay 37:07 it's going round about 37:18 okay i mean not i don't mean that in a 37:21 bad way 37:22 it's just how helm works i guess 37:25 so far i see the source code is pretty 37:28 clear 37:34 um 37:36 justin scott scofie good morning good 37:39 morning to mathematician 37:41 are you a professor or maybe you are a 37:43 professor already right 37:45 at some university or vancouver or 37:48 something 37:50 my eyes okay i talked about this a 37:52 million times 37:54 i have a little bit cross side that's 37:55 why i put this patch on so i 37:58 easier for me to read the computer 38:00 screen 38:03 so describe so so so i'm 38:06 i'm stuck in this so anyway this is a 38:09 side question 38:10 about how helm 38:14 how helm wraps around emacs default 38:17 functions okay that's a 38:18 another different question we are 38:21 getting 38:22 off track 38:26 so anyway now back to the helm structure 38:29 okay so we are looking at so back to 38:31 helm 38:35 structure so helm 38:39 so we look at we looked at helm.el 38:43 we looked a little bit at helm 38:46 dash lib uh let's see 38:49 how multi match okay let's open 38:54 author ruby kitch 38:57 original author okay then 39:01 fear theory well piato okay 39:07 uh so this guy who spent a lot of time 39:10 like full time 39:12 working on helm you know because i read 39:16 one time i read a you know announcement 39:18 on reddit or blog 39:20 you know he's saying that's really a lot 39:23 work 39:24 and this guy doesn't really do blogs or 39:28 video interview i think maybe there's a 39:30 few yeah i think there's a 39:32 few but he he doesn't 39:35 like he's not in public too much 39:39 uh so he you know he's saying 39:43 which i don't agree because you know 39:45 every emacs 39:47 lisp coder or user once you use emacs 39:51 for a few years you have your own way 39:53 and you think it is the best way 39:57 so i you know i use stuff like keys 40:00 then there's two me max there's space 40:02 emacs 40:03 then there's helm uh you know 40:06 besides helm there's also you know this 40:09 i do there's helm there's uh 40:10 iv iv a bunch of things ivy 40:14 so you then there's i icicles icicles 40:18 is one of the oldest you know so each 40:20 person have different 40:22 ideas about which is the best 40:25 interface or best way to operate emacs 40:30 but i remember i read this guy 40:33 says you know he he you know he wants 40:36 helm to be 40:37 the you know he likes help he you know 40:39 and 40:40 he mentioned there's a lot work he 40:43 mentioned something about you know it's 40:44 gonna be five more years 40:47 uh something like that until he 40:51 find helm to be perfect 40:54 you know then so there's a lot of work 40:57 and i don't think he get paid 40:59 sufficiently so 41:01 donate you know that's a problem one of 41:04 the problem with open 41:06 source i don't know because last time i 41:09 read he's like 41:10 he's gonna stop working on it because he 41:13 is too busy with life and 41:15 real you know work where he gets money 41:20 i don't i don't remember if if that's 41:22 still the case or he 41:24 went back to work on helm i forgot 41:28 so anyway so so okay a a bit digression 41:31 so at this point i think we should 41:35 have a look at helm's homepage you know 41:38 see what 41:39 um you know so we get familiar what what 41:42 what 41:43 what it is doing so here is a helm home 41:47 page 41:49 helm let's see uh 41:53 yeah i think he's still the primary code 41:56 i'm guessing uh so we 42:00 look at the commits 42:03 merge pull request much pull request 42:08 okay yeah no it's almost all is done by 42:12 him so he's 42:13 stuck he's stuck working on helm 42:21 yeah older yeah he's 42:24 still very busy working on helm you know 42:27 almost like every day 42:29 lots of code 42:32 uh yeah looks like he he's almost the 42:38 i mean he's the only leader 42:41 as opposed to having another guy because 42:44 all the commits are basically by him 42:46 you know uh managing the project 42:50 you know merging pull requests things 42:53 like that 42:56 okay so so today 43:00 we already talked for 43 minutes okay 43:03 this is gonna be a long one so 43:05 we're gonna do two hours maybe two hours 43:09 uh i kind of digressed but anyway i we 43:13 i do need to look at helm so here's a 43:16 home page uh 43:22 home home page documentation 43:25 what is the documentation okay these are 43:28 png 43:28 files 43:32 uh what yeah png files 43:38 okay 43:40 okay now let's go back now let's see 43:46 all these helm files helm tag helm type 43:49 okay 43:52 so so helm has this icon this is not 43:57 a good icon because it 44:01 fails the criteria of being simple 44:05 because the helm icon is based on 44:08 photograph 44:10 they you know it should simplify into a 44:14 actual symbolic icon it would be so 44:17 that's my 44:18 okay that's my offline suggestion to 44:20 help people 44:22 you need this is not a good logo 44:28 so you can one way to fix that is to 44:33 simplify symbolic you know make this 44:36 photograph symbolic okay 44:40 you know i believe this photo is from 44:42 some kind of 3d 44:44 uh movie 44:48 i think about robot robots or 44:52 i think that i forgot anyway 44:57 so helm is an emacs framework exactly 45:00 framework for incremental completions 45:02 and narrowing 45:03 narrowing selections it provides an easy 45:05 to use api 45:07 for developers wishing to build their 45:10 own home applications in emacs oh okay 45:13 so it does have a api now where do i 45:17 where can i read the documentation for 45:18 that because 45:21 that solves our problem okay so it 45:24 contains 45:24 easy to it provides easy to use api for 45:28 programmers 45:30 uh and powerful search tools and dozens 45:33 of already built-in commands 45:35 providing completion to almost anything 45:38 yeah because the original name of helm 45:42 is 45:42 anything okay let me give you a bit 45:45 history the original name of the helm 45:47 package 45:48 is just called anything.el and that 45:51 is inspired by a mac program called 45:55 um quicksilver okay 45:58 okay digression 46:03 uh i close my browser by mistake 46:06 okay reopen okay new window 46:13 so quicksilver began sometimes in 2004 46:17 okay let me open that 46:19 uh and is there a wikipedia power mac 46:26 um 46:28 i want i want to show you okay here 46:32 so you can see yeah this is the one so 46:34 quicksilver began 46:35 in uh 2003 or something okay 46:39 and that basically it provides the 46:43 interface 46:45 as you type you know things show up the 46:48 things can be your application to launch 46:50 can be your files that contains whatever 46:52 you typed can be a file name 46:54 or can be you know like anything you 46:56 know you know so it changes 46:58 so this becomes this began on the mac 47:01 a third-party software which is which 47:04 was fantastic one you know greatest 47:06 it led a revolution in user interface 47:11 across mac linux and windows 47:14 so because of quicksilver then someone 47:18 in emacs developed anything.el 47:21 which is the father of hell okay they 47:25 because anything is too confusing they 47:26 change the name 47:29 so so quicksilver is a granddaddy and 47:32 also 47:33 in linux you started to have you know 47:35 ubuntu started to have their 47:37 user interface i forgot what's it called 47:40 and 47:40 also in microsoft windows for example 47:42 again i can just 47:45 power you know i can just type a few 47:48 words and 47:49 it pops up applications or 47:52 file names or you know containing that 47:54 or 47:55 you know you know any you know 47:59 so it revolutionized revolutionize 48:03 the kind of the user interface 48:08 okay that's a bit history okay so 48:12 uh and you know so here's the 48:14 quicksilver home page 48:16 okay now back to helm 48:20 so it says it is a must-have for 48:23 anything 48:24 for anyone using emacs as a main work 48:26 environment 48:27 you know that's his opinion 48:30 i don't like i actually do not like 48:34 the to 48:38 to rely on this kind of searching on the 48:40 fly 48:41 user interface for all my things i don't 48:44 like that actually because i want 48:47 precise control for example i want to go 48:49 to the task manager 48:51 i press one key test manager if i want 48:53 to go around the box 48:55 i mean the tabs i press one key 48:58 okay i want to go to my um 49:02 powershell i press one key tab manager 49:04 powershell or any browser okay 49:07 uh you see it's all one key 49:10 operation so i don't want to type you 49:14 know for example i want to go to firefox 49:16 i press one key uh wait which key this 49:19 key wait 49:20 yeah that that key okay so for example i 49:23 mean here 49:23 i want to go to firefox 49:27 one key okay i can show you my 49:30 keyboard okay let me show you my 49:33 keyboard okay 49:39 now i have you know okay it's hard to 49:42 see but anyway 49:44 test manager this okay i need to 49:52 okay so so this keyboard you are looking 49:55 at 49:55 uh this one is kinesis advantage two 49:59 you just search for xari kinesis 50:01 advantage 50:02 keyboard you will find my reviews and 50:05 video reviews i 50:06 recommended this is a linear switch 50:11 and this this is 50:14 ultimate hacking keyboard so task 50:17 manager 50:19 uh powershell 50:23 firefox uh that is 50:26 uh uh chrome you know it it 50:30 disappears because i have actually two 50:32 chrome windows 50:33 okay so anyway chrome and and bray 50:36 browser 50:37 and emax you see one single key 50:41 press i don't need to type f-i-r-e 50:44 you know to then then i have to look 50:48 oh is it firefox then press enter i 50:50 don't need to do that 50:55 okay let's go back to obs let's 50:59 go back to 51:06 so this is my a little bit you know 51:09 philosophy or style 51:10 about using the helm interface you know 51:13 this 51:14 this type to search anything to launch 51:17 anything 51:17 interface i don't want that 51:21 so i disagree with the helm's 51:24 claim you know this 51:27 is a must-have and similarly 51:31 in e-max i don't want to just start to 51:33 type anything to for file so for 51:35 you know i have precise i know exactly 51:38 what i want i want to go to my for 51:40 example 51:40 talk show page one two three three keys 51:44 tlk okay and this is just 51:48 this is book smart bookmarks i've made 51:51 myself 51:52 i don't want it to if i start to type 51:54 talk 51:55 i don't want it to to search my whole 51:58 drive and pop up 51:59 all kinds of files that contains the 52:00 word talk okay everything is 52:03 tightly controlled that's what i want 52:05 you know 52:06 uh bookmark or things or anything yeah 52:08 and also commands you know 52:11 so the helms way 52:15 you know different person have different 52:17 preferences i don't like 52:18 i don't you know helm's way is not my 52:22 what i want so anyway so helm is pretty 52:25 good you know but it's 52:26 uh you know for a lot you know it's very 52:29 useful okay different people have 52:30 different um you know workflow helm has 52:33 been 52:34 widely adopted by many emacs power users 52:37 that's true 52:38 uh it is available in mailpower and okay 52:41 okay 52:41 great documentation this you know if you 52:43 are a software developer especially if 52:46 you are a 52:47 nerd a hacker type very technical you 52:50 know you 52:51 dive into linux or emac lists you want 52:53 your document 52:54 documentation to be like the helm what 52:57 very great fantastic introduction 53:01 in one paragraph you know what it what 53:03 it does 53:04 exactly okay uh and very well written 53:08 this cannot be said for for for vast 53:11 majority of 53:12 emacs packages usually they are very 53:16 nerdy 53:16 like you read it you have no idea what 53:18 they're talking about they don't give 53:19 you the context or things like that 53:22 the helm ones is excellent 53:25 documentation okay home page download 53:28 get started this is also fantastic you 53:30 know you can 53:31 you know home page okay home page 53:34 download get started helm 53:36 wiki faq so we need to read a few 53:40 let's open home page and also this 53:42 picture is 53:43 fantastic you know it gives people 53:46 immediately 53:47 an idea what this helm is doing the 53:50 interface you know while most emacs 53:53 project 53:54 packages they are like you you don't 53:56 know what they are what 53:58 exactly what they are but they have full 54:01 of jargons you know to 54:02 impress other hackers like that's to be 54:06 typically the case anyway we 54:10 we i have digressed so much uh 54:13 i need to actually get back to the main 54:16 point about 54:17 finding out how the first imagine works 54:20 in hell but 54:22 okay but but we need we do need to look 54:25 at the documentation 54:27 so this is part of the process of coding 54:30 uh and you know since i'm doing live 54:33 talk show 54:34 i might as well tell you something 54:36 interesting 54:41 uh good morning people and greetings 54:43 from chia 54:45 chili daniel garrido i think i 54:48 we talked before right uh join discord 54:53 guys if you guys haven't okay you saw 54:55 this 54:55 exact discord uh join there 54:59 and we can um you know so i can 55:03 know you you can you know we can have 55:05 fun chatting 55:08 okay okay back to 55:11 help okay let's let's go back to focus 55:14 on help 55:16 so you have home page open home page 55:19 okay 55:19 home page you have get started 55:22 then you have helm wiki open helm faq 55:26 that's 55:26 i want to read them all 55:30 okay uh this 55:34 so what is a home page so what in my 55:37 firebox 55:39 home page okay 55:43 okay table of contents intro 55:46 features alternatives requirements 55:48 getting started okay 55:50 home applications uh recommended 55:54 recommended helm extensions okay intro 55:58 okay okay helm is a fork of anything.el 56:02 oh it's a fork 56:04 which was originally written by 56:07 thomas petrovic okay 56:11 [Music] 56:13 yeah features okay alternatives okay 56:21 [Laughter] 56:23 this is uh not historically 56:27 historically true it says there are 56:29 several alternatives to help 56:32 nowaday they are all providing 56:35 incremental 56:36 completion but they lack all the help 56:39 features due to 56:40 due to their wrong implementation 56:42 abusing minibuffer 56:46 quite a damaging remark and traumatic 56:49 this is 56:50 incorrect you know it says there are 56:54 there are several alternatives to help 56:56 nowaday implying that 56:58 helm is the first no before helm existed 57:01 there are quite a few there are three or 57:03 four 57:05 uh before help even before anything okay 57:08 before anything 57:10 so helm is derived from anything.el 57:13 before anything there is already i do 57:16 there's already uh not just i do there's 57:18 quite a few i 57:19 have an article on that 57:22 uh okay search for 57:31 yeah so there is i do there 57:34 is i complete there was there is there 57:38 are still 57:39 in e-max okay there's also ice switch 57:42 these are all before far before helm 57:45 ever existed 57:46 if 10 years 57:49 before helm existed so 57:52 this statement by helm is 57:56 you know it's it's a bit you know 57:57 marketing which is all right everyone 58:00 does that 58:01 you know i don't have a complaint but 58:02 this is incorrect 58:04 there are several alternatives to help a 58:07 day 58:08 no there are several you know existed 58:11 beforehand 58:13 and then it claims they are all 58:14 providing something something abusing 58:16 mini buffer 58:20 what what a remark no you 58:23 you helm is going way over engineered 58:26 you know 58:27 i don't like helm helm is you know one 58:31 of the actual 58:32 common complaint about helm is it's slow 58:35 you noticeably 58:36 you know if i call m smix okay smacks 58:40 smacks actually came before help i think 58:43 you know helmets by now like you know 58:46 depending on whether you count 58:48 anything.el 58:49 which is its father you know if you 58:52 count anything.el 58:54 then helm is like uh 15 years old 58:58 something like that 58:59 okay but but there 59:02 okay i okay maybe smacks come 59:06 after help after anything that yeah okay 59:08 so anyway 59:09 anyway so back to reading the helm 59:12 documentation 59:13 you know i'm making some criticisms of 59:16 my own dramatic 59:18 dramatic remarks of my own just as he's 59:21 doing it 59:22 there marketing statements 59:25 uh requirements okay getting started uh 59:29 install from straight okay straight is 59:31 another you know newish thing 59:35 uh not sanctioned by gnu emacs by the 59:38 way i want to mention that 59:41 uh because they are good anyway i'm i'm 59:44 starting to digress into kind of a rant 59:46 let's go back to 59:48 focus focusing on the code 59:53 okay so so yeah so install just a helm 59:56 call package okay helm core which we 59:58 uh studied warning about alternative 60:02 learning about alternate install methods 60:04 configuration 60:08 basic usage okay basic basic usage 60:12 helm mx okay 60:15 and important in any home session as 60:17 soon as there is 60:18 candidates in the helm buffer chm 60:22 pops an oak buffer which detailed 60:26 with detailed documentation about 60:28 current command 60:29 okay that's a useful feature 60:33 oh by the way uh amex also does that 60:36 smacks now that makes max 60:40 but the key is chf which is more 60:42 standard with glue emacs 60:46 okay so uh use it with no moderation 60:49 uh use this embedded info screens first 60:52 before reporting bugs okay 60:55 so helmet to enable helm completion to 60:59 for for e for common emax commands 61:02 note that the helm functionality enabled 61:06 through helmet comes from generic 61:08 implementation and does not 61:10 include all helm features available 61:13 through equivalent helm specific 61:15 commands okay 61:17 so that's uh you know that's uh issue 61:19 that's a 61:20 kind of a implementation issue or 61:24 emax structural issue 61:27 because one would likely ideally one 61:30 would like to turn on this mod 61:32 then you just have everything you know 61:35 work using the helm interface 61:37 but due to the way emac 61:41 uh this is or emac structure 61:44 you don't have that you know you if you 61:47 turn on 61:48 hell mod it just give use kind of 61:52 some of that feature 61:55 uh if you want a fully integrated 61:58 helm experience you need to you know 62:01 download the 62:02 helm specific mods like that's why you 62:06 see 62:06 you know if you look at the packages 62:09 there's a lot of tons of helm packages 62:13 okay helmet okay so so advanced 62:16 usage okay helm contains many features 62:20 some of which are easier to follow 62:21 visually here's a demo of helm buffer 62:24 list 62:25 okay which uses helm marker mocha 62:29 multi-occur i guess demo start with 62:32 eval start okay 62:37 okay i'm not sure where are we where am 62:40 i going with this 62:45 okay those questions you know you watch 62:48 my 62:50 you you you know in many of my videos 62:54 i talked about those issues 62:57 about things like why is emacs not 63:00 popular why is that emac at least not 63:02 popular i talked 63:04 so many times about that 63:08 uh in the past you know just watch 63:11 in the past few months you know you can 63:14 begin there 63:15 so 63:19 so here okay important matching methods 63:22 helm support by default multi-pattern 63:25 matching okay 63:26 it is the standard way of matching in 63:29 helm 63:30 multi-pattern matching okay for example 63:33 you can use 63:34 patterns like full bar to match your 63:36 line containing four 63:37 and bar or bar and full each pattern can 63:41 be a regular expression 63:42 okay in addition helm supports first 63:46 imagine 63:46 okay 63:50 okay i need to look at what exactly how 63:53 it defines how 63:54 you know helms fuzzing first imagine 63:58 uh capabilities helms 64:01 you know this is what we want to do uh 64:04 helms building fuzzy matcher is 64:06 activated for some commands helm's first 64:09 imagine is disabled by default okay 64:11 disabled by default 64:13 county this command support first 64:15 imagine okay now i get it 64:18 so by default 64:21 if you do not do any configuration then 64:24 if you call helm 64:25 mx it is actually not using 64:29 fuzzy matching okay but rather 64:32 i'm not sure there's a term it's using a 64:35 kind of matching 64:36 where it's word based and order does not 64:39 matter 64:41 okay but but helm does support 64:44 first imagine which is kind of more i 64:47 guess complex 64:49 but you have to turn them on so you have 64:51 you can turn them on for recent 64:53 f for mini for buffer list for fine 64:55 files for locale 64:57 for you know meta x for semantics yeah 65:00 so 65:06 okay 65:08 okay so so on this page first imagine 65:12 it does not explain exactly 65:15 what is the definition of first imagine 65:19 used by help rather it just gives you 65:23 gives you a list of helm functions that 65:25 does 65:26 you know this kind of match it doesn't 65:28 actually explain 65:30 or specify exactly what is the first 65:32 imagine 65:34 helm is using you know but that is what 65:38 i want to know i i'm interested that's 65:40 what i want to know 65:42 you know i want to you know i don't 65:44 think there is a specific definition for 65:47 first imagine but rather it's just some 65:50 kind of matching you know 65:51 different programs defined you have 65:53 different ideas of first imagine that i 65:55 don't think there's 65:56 one universal definition of first 65:59 imagine 66:00 okay okay but still it's good to know so 66:04 the default way 66:07 how matches when when you call helm mx 66:11 is a word matching odorless world 66:15 matching let's just say 66:17 let's put it that way all the less 66:19 matching backwards 66:22 okay 66:25 and which is what i want you know i want 66:27 to try i want 66:28 that so okay so that that gives 66:32 us a clue in source code so ins you know 66:34 we remember 66:36 we saw a lot of functions 66:39 so these matching lines you know 66:45 uh 66:50 wait what is this 66:53 so helm leave the file helm lib 66:57 open it 67:00 called these matching lines defend 67:03 then search for 67:08 search for match okay only three 67:11 occurrences 67:13 search for okay 67:16 it's not in this file so go back to the 67:19 directory 67:20 open the helm dot el now this matching 67:24 line is 67:24 defined then search for fuzzy so you can 67:29 see 67:34 so these are you know you have six or 67:37 seven functions that does first 67:39 first imagine so these are the these 67:41 functions 67:42 implement the first imagine but however 67:45 for my purposes i do not need to look at 67:48 them because 67:50 because i am interested first you know 67:53 at 67:53 first i'm only interested in the word 67:56 older less word matching 68:00 not first imagine okay now that 68:03 reading the documentation clarified that 68:06 part 68:08 okay so creating custom helm 68:11 sources okay sources 68:14 in helm means like list of candidates 68:18 so it may be commands or file names or 68:20 whatever 68:22 so you can create custom home sources 68:24 okay 68:27 yeah okay so home applications okay now 68:31 it calls 68:32 okay now it now they help 68:35 you know this is another marketing term 68:38 helm applications 68:42 which is basically a list of different 68:45 helm commands that does you know 68:47 that uses helm interface they are not 68:50 exactly 68:52 well they are not apps but they are well 68:54 they are applications you know that that 68:57 where helm is useful 69:00 so these are popular applications 69:02 developed using helm completion and 69:05 narrow 69:06 narrowing framework they are available 69:08 for individual installers 69:10 through the emax package manager this 69:13 list 69:14 is not exhaustive okay 69:19 so are they saying these are not part of 69:22 the helm package 69:26 so let's say helm find files okay one 69:29 command 69:30 that handles all the files related 69:32 command okay so that 69:33 no wonder so let's see if that 69:36 is building so describe function 69:41 paste helm find files enter 69:44 it's not there oh okay so okay that's 69:47 another 69:48 thing i learned when you install the 69:50 helm package 69:51 it does not actually contains a 69:55 you know find file okay 69:58 that's interesting i thought that's so 70:00 fundamental it's part of it 70:04 wait wait wait why does it not what 70:06 about this buffer list 70:10 right so uh 70:21 oh so pounds buffers list is there 70:26 but helm find files is not that's that's 70:30 wait ctrl h 70:34 f helm 70:38 find ah god this is slow 70:44 ah god i have like a half a second delay 70:52 what's what's going on helm f i n 70:59 yeah this is you know this is why this 71:02 is a practical issue with helm 71:05 great interface but slow 71:08 so you have helm find but you don't have 71:11 helm 71:11 fi find file 71:15 so what is helm find helm find is a uh 71:18 okay 71:19 it's bound to something something uh 71:21 recursively 71:22 find files whose name are matched by all 71:25 specified grabbing patterns you know 71:29 you know it's slow because it's probably 71:31 i don't know where is it looking at my 71:33 files i hope 71:34 it's not my whole disk 71:37 that's you know that's that's you know 71:39 that's why 71:41 i don't want this anything thing 71:46 uh okay so anyway these are commands 71:50 that uses 71:51 helm interface some of them are building 71:54 i guess 71:56 some of them you know are external 71:58 packages you have to install 72:02 so then you have extensions recommended 72:05 helm extensions normally all hell 72:07 modules coming from emacs helm 72:09 organization are safe to use 72:12 otherwise it is mentioned in their 72:14 readme if they are broken or 72:16 meant until unmaintained 72:20 here are some of them i'm using okay 72:28 okay so please besides besides 72:32 you know so-called helm applications 72:35 then you have another level called helm 72:38 extensions 72:46 so i guess these are more kind of more 72:49 exotic 72:51 so i'm supposing the the 72:55 the differentiate differentiating 72:58 line is that these helm applications 73:02 merely supply helm by a source 73:05 you know while 73:09 these helm extensions are 73:13 more involved you know like helm firefox 73:16 like like what what does it do helm 73:19 firefox 73:23 emacs helm interface to firefox 73:26 bookmarks oh interesting so it actually 73:30 grabbed 73:31 the firefox books bookmarks so you can 73:33 open them in 73:35 potentially you can control firefox 73:38 launch 73:39 bookmarks in helm within emacs 73:42 okay yeah so you have some of that 73:45 then other emacs extensions recommended 73:48 with helm 73:50 okay the exten external programs 73:52 recommended with helm 73:54 rip grab okay known issues okay 73:59 contributors so 74:02 uh the helm documentation is 74:05 superb i want to make that comment okay 74:08 the 74:10 the helm documentation of all 74:13 let's say just within emacs of all emacs 74:16 uh packages documentation i've seen 74:19 is the one of the best let's say top 74:22 five 74:23 superb clarity 74:27 fantastic introduction uh 74:30 you know organization clarity 74:33 detail well we haven't looked at we i 74:36 mean 74:37 i don't know about that yet but superb 74:40 okay helm stock documentation and also 74:43 the 74:44 user interface you know you can view on 74:47 github download 74:48 right away and you know yeah so helm 74:51 documentation 74:53 a great job great job helm 74:56 people so then it says 74:59 uh created by helm is implemented by 75:03 helm 75:04 emax helm helm team so who are the emacs 75:08 helm team 75:10 okay it doesn't really say people okay 75:15 okay these people are 75:18 mostly contributors i think 75:22 okay d1 i recognize 75:27 okay now i don't know if they are 75:30 actually a team 75:31 or are they just major contributors 75:38 from what we seen before mostly just 75:40 just 75:41 this guy theory you know in the past 75:43 month or so it's all 75:45 him 75:48 okay so it's actually members okay so 75:51 these are actually 75:52 members okay 75:56 so if you want to join helm you know if 75:59 you love help 76:00 join them you probably 76:03 you know start to contribute some code 76:07 in 76:08 and join them okay let's help 76:11 okay so i have finished reading the helm 76:15 home page now uh well 76:18 i mean at least i've i we have scanned 76:21 it well we basically finished reading 76:23 them 76:25 now let's look at 76:29 the now okay here's the helm wiki 76:33 potentially it should contain lots of 76:35 miscellaneous information 76:37 okay upgrade or recompile configure 76:41 gener general concept okay i want to 76:44 read that 76:45 quick try with emacs helm okay general 76:48 helm commands 76:49 and so on 76:55 okay okay 76:58 so next wiki why is the wiki 77:03 repeated okay so delete that it's the 77:06 same page okay now 77:08 frequently asked questions 77:11 error with helm adaptive part arrow when 77:14 running 77:15 make i installed helm with straight 77:18 and emax helm dot sh is not working okay 77:22 uh that's a bad one you shouldn't 77:25 require people to run make 77:27 in my opinion when you have a e-max this 77:31 package you should never require people 77:34 to 77:34 run make or shout script just 77:38 let it be emacs lisp keep things 77:41 simple so people don't have to install 77:44 oh i need to install 77:45 make or what which version oh is it glue 77:48 make 77:48 or bsd make you know especially on 77:52 windows 77:52 it's all more problem just use emacs 77:56 lisp you know that's that's the thing we 77:58 are pushing that's the thing we love 78:00 make it make it all emax this even 78:04 if that means you have to do a bit more 78:06 work that's my opinion 78:08 and especially shout like don't don't 78:12 don't make people run bash to ins as a 78:15 required 78:16 step to install your package 78:20 um okay so faq 78:24 uh why does melpa update given arrow 78:27 using prefix okay function okay 78:29 this faq we are not concerned 78:35 okay yeah a bunch of uh 78:39 you know small errors when running helms 78:42 okay 78:42 next okay quicksilver quicksilver 78:47 uh okay 78:51 so we finished reading the faq 78:54 kind of and we finished reading 78:58 okay the home page of helm then there's 79:01 uh helm wiki now where 79:04 is the programmers api for help must be 79:08 somewhere 79:14 i'm getting tired let's see oh sit at e 79:19 5 usd thank you so much 79:24 uh fantastic 79:28 do you have a question special question 79:30 for me 79:36 uh guy or e-max when okay i talked about 79:39 that 79:40 a thousand times in my in my past videos 79:43 okay 79:44 uh unless you are trolling me so why 79:47 this 79:47 never took off okay again i talked about 79:50 that 79:51 about that a million times do you reckon 79:53 windows is better 79:55 what kind of a bunch of trolling 79:57 questions 80:00 i talked about that a thousand times 80:04 windows which one should you use windows 80:06 omega linux 80:08 i talked about that several times in 80:11 star talk show 80:12 just search it you should find it 80:16 okay but says the emboss says okay so 80:20 something how do you auto import modules 80:22 in emacs 80:29 how do you auto import you know you use 80:33 you call use package are you a newbie 80:35 are you a 80:36 new emacs users anyway i'm not going to 80:40 talk about that today because today is 80:42 you know the you know for what i'm doing 80:46 today 80:47 it's more for people who already know 80:49 emac beast 80:50 is actually for you know 80:53 fairly advanced emacs users who already 80:55 know emac this i'm coding 80:57 i'm trying to find out about how helm 81:01 implements first imagine and in fact 81:06 i have discovered you know just now we 81:08 discovered 81:09 first imaging is not the thing we want 81:11 to look for we want to look for 81:14 how helm implements 81:18 odourless word matching and that's part 81:21 of the default helm 81:23 uh helm meta x okay 81:26 i have been talking for one hour 81:30 and uh 20 minutes basically 81:35 uh and i'm kind of tired um 81:40 for the past hour i've been rambling 81:42 about helm documentation anyway 81:46 so so back to emac this 81:50 code in order to do really do these i 81:53 actually i need to just do it myself 81:56 i cannot um 82:01 uh and i actually i do need to take a 82:04 break being sitting here you know i need 82:05 to take a walk 82:08 uh so so we have not 82:12 made progress well we made some progress 82:15 but 82:16 we are far away 82:20 from the goal of understanding 82:23 how helm does what orderless word 82:26 matching 82:27 so but we made some progress okay let's 82:30 let's write them down okay 82:32 close close close all these close close 82:36 close okay so 82:39 so here is what we know so far we have 82:42 the helm 82:44 call stack helmet meta x course 82:47 helm meta x read extended command 82:51 then that calls helm function then that 82:54 calls 82:55 helm internal then 82:58 then that course helm read from 83:01 minibuffer and 83:03 and also probably setting up a bunch of 83:06 patterns or 83:07 candidates or sources things like that 83:11 and basically that's it and 83:16 so in helm they use 83:19 the word fuzzy imagine 83:25 to mean some sort of 83:28 fuzzy imagine okay now again 83:33 we have not found 83:36 how it is defined you know we want to 83:39 find 83:39 a documentation possibly if there's one 83:42 how helm defines first imagine we 83:45 i don't know yet but we do know that 83:51 but the 83:54 helm meta x thing 84:00 is actually not 84:04 using helm's 84:07 fuzzy match but 84:12 let's call it 84:15 older less word-based 84:19 matching okay 84:23 okay that's what we learned today 84:28 um 84:35 okay and the next thing to do 84:39 where is the dog for helm 84:43 api so i thought 84:46 i thought we saw that mentioned 84:49 somewhere 84:50 a documentation for api for programmers 84:53 api 84:55 such such okay not 84:58 it's not here 85:02 okay go back to 85:10 uh 85:14 so go to the helm full home page 85:18 search for wait what is this this is a 85:21 helm 85:22 home page search for 85:25 api okay so it's not here 85:29 now go to this one 85:34 this is the helms 85:40 documentation i think search for 85:44 api where does it look 85:47 oh there wait that's github api 85:51 oh okay so now okay 85:54 okay actually this is the wiki 85:58 now let's go to faq search for api 86:03 okay not here let's open a new browser 86:07 let's say emacs helm api 86:12 i hope i can find the 86:15 helm api documentation if 86:18 it exists 86:22 would be fantastic 86:27 not here because we've already looked at 86:29 here 86:31 helm web api 86:35 okay that's that's that's a different 86:37 thing that's not emacs 86:42 well actually it's probably related to 86:46 um helm but it's for other things it's 86:53 kubernetes cluster to programmatically 86:57 install 86:58 helm charts and expose them through a 87:00 single public facing 87:02 uh public facing ip what the is 87:05 this 87:06 font 87:16 elisp where to find emacs helm 87:18 documentation 87:20 let's see now that's a stack overflow 87:23 question where to find emacs helm 87:26 documentation yeah 87:28 helm is a great so this is written in 87:31 2018 okay still 87:34 pretty good come it's a great framework 87:44 okay but provided no instruction on how 87:47 to do 87:47 so uh this page advises user to update 87:51 extension okay helm wiki doesn't provide 87:54 any helpful information on writing 87:56 extensions 87:56 using helm framework okay this is the 87:59 question we want 88:01 it's not even user editable containing 88:04 grammatical errors 88:05 if that no one fixes or pull requests 88:08 are not accepted which i find really 88:09 unwelcome okay so this is uh 88:13 this guy nuen yen uh uh probably a 88:16 vietnamese 88:17 he's rather criticizing help 88:20 so he's looking for helm's api 88:24 documentation for programmers just like 88:26 i am 88:28 okay so he says i've been extensively 88:31 using helm recently and like it a lot 88:34 and i want to write a cheat sheet 88:37 to serve my workflow better so my 88:40 questions are is there is the updated 88:42 anything documentation applicable to 88:44 help 88:45 okay is there any useful documentation 88:47 about helm which explains how it works 88:50 and how to write extension using it yes 88:53 i want to know that i've been googling 88:57 for a while but i couldn't find anything 88:58 okay okay 89:02 so let's see if there's answer there's 89:04 no answer but 89:06 you have a bunch of comments 89:09 as far as writing your new extension for 89:11 helm i would recommend the 16 minute 89:14 video 89:15 video 89:19 okay a very good tutorial was written by 89:22 john kitchen 89:23 okay i know that guy john kitchen we 89:26 met face to face he came he came to my 89:29 place 89:30 one day uh great he you know a great 89:33 he's a 89:34 professor of 89:38 uh chemistry i think material science i 89:41 think 89:42 uh at carnegie mellon 89:46 you know one of the famous university 89:50 and he wrote the e-max uh distribution 89:53 called psy psy emacs or something it's 89:56 for basically for 89:57 academics for professors you know 90:00 for for i could yeah research 90:05 uh to for for researchers 90:09 to write academic papers so he you can 90:12 you know john kitchen so just search for 90:14 for his name 90:15 john kitchen e-max 90:18 it's a very big 90:22 useful you know package 90:25 so anyway so let's see so john kitchen 90:27 so 90:28 a very good tutorial was written by john 90:30 kitchen okay 90:31 so here how to write helm extensions 90:34 okay 90:36 and the the documentation was initiated 90:39 thanks to john kitchen's article on his 90:41 blog 90:42 okay so he has a article 90:45 okay fantastic i'm going to so this is 90:49 written in 2015 90:50 i suppose it's still good i'm going to 90:54 read this 90:59 okay this is great uh resource 91:02 and then i guess this wiki uh 91:05 emacs wiki version wiki emacs version is 91:08 kind of 91:10 you know kind of more cleaned up or 91:12 general 91:13 okay so i'm going to read this 91:18 okay they are updated you know 2015. i 91:21 think wikimax 91:22 is kind of dead nobody's actually using 91:26 it but anyway 91:28 so here's one thing to read and here is 91:30 another okay 91:32 first of the three original post block 91:35 okay 91:35 so so so he introduces okay 91:43 okay so i'm gonna read that john 91:45 kitchen's documentation 91:49 so and also 91:56 then the vietnamese guy complained 92:00 uh what 2014 92:04 he says what's going on 92:08 and the documentation is badly written 92:10 okay he's referring to 92:12 some other documentation not the one by 92:15 john kitchen 92:17 okay so 92:21 so what about the wiki 92:25 so i need to explore more about 92:29 wiki yeah okay developing i should yeah 92:31 so there is 92:33 okay there is developing and this first 92:35 imagine okay so here is the 92:38 documentation 92:41 yeah so let's see let's look at 92:43 developing 92:46 introduction creating a helm buffer helm 92:48 attributes 92:49 customizing action list creating a 92:52 source creating a class creating 92:54 writing actions okay developing with 92:57 helm framework 92:58 fantastic 93:03 okay this is uh this is what i'm looking 93:06 for 93:08 so i'm gonna have to spend you know a 93:11 few hours 93:12 uh god 93:16 i didn't expect it to be this 93:19 you know big of framework 93:22 so i'm actually i'm actually getting 93:25 into a 93:26 the helm framework and apis 93:29 uh then there's the first imagine 93:34 yeah okay it doesn't we've seen this 93:37 before it doesn't define what exactly is 93:39 there first imagine it's just 93:41 this a bunch of functions that does it 93:44 okay but okay so that's it 93:49 so it's you know judging from these you 93:52 know kind of 93:52 short basically that's all you get 93:55 that's all 93:56 that's basically all i get 93:59 you know the useful information i don't 94:01 think there's much more 94:04 on the wiki so okay so 94:07 at this point i just gonna dive you know 94:09 into source code and 94:14 and i don't think i'm going to create 94:16 another part for this 94:18 series of videos of exploring helm 94:21 source code because it's not proper 94:24 it's not gonna be very interesting it's 94:27 gonna be 94:28 you know for people already know lisp 94:33 so i think that's it for today okay 94:36 that's it for today 94:37 i let me just mention so if you like my 94:40 stuff 94:41 go buy my emacs tutorial okay so i have 94:44 a 94:45 emacs this tutorial that 94:48 contains also i did a video i did 94:51 several videos by now 94:52 that teaches you emacs lisp so you can 94:56 learn 94:56 emac lists from the ground up the most 95:00 practical way 95:01 uh you can learn it quickly in a week or 95:03 two 95:04 you can become fairly 95:07 self-sufficient in you know coding e-max 95:12 okay so buy it or paypal me 95:15 you know but you can buy it you know 95:17 here the 95:18 link or you can paypal me or 95:21 patreon thank you 95:25 okay that's it for today thank you guys 95:27 i'm gonna shut down 95:29 in one minute 95:37 okay so you so alpha beta you started to 95:40 use emacs 95:41 yesterday yeah so congratulations you 95:44 have a long way to go 95:46 indeed you know i mean it will be 95:51 it will be fun exploration you know you 95:54 you know you can launch emacs and you'll 95:56 be already useful 95:58 but if then you might explore you know 96:01 you want some better ways 96:03 you you as you go as you go whatever you 96:06 i don't know if you are a student or if 96:08 you are already a coder or researcher or 96:10 whatever 96:12 you can customize emacs to find to make 96:15 it better for your needs 96:17 and that is kind of a journey you know 96:20 some people say it's a lifestyle so 96:22 i've been using emacs for 20 years so 96:25 you just go you know 96:26 it becomes also a part of that is a code 96:30 you 96:30 welcome to the emacs code or emacs 96:34 church as richard snowman would say 96:45 okay that's it thank you guys for 96:47 watching and thank you 96:49 sid ali bye guys