summaryrefslogblamecommitdiffstats
path: root/2020/subtitles/emacsconf-2020--34-extend-emacs-to-modern-gui-applications-with-eaf--matthew-zeng.vtt
blob: cb2623553468861b5984c3107eac0b827343a0ef (plain) (tree)
1
2
3
4
5
6
7
8
9


                             
      

                             
                                      

                             
             










                                       
                                      




                                     
                          

                             
                                     

                             
                                       

                             
              

                             
                                         

                             
             

                             
                                

                             
                       

                             
                                   




                             
                           

                             
                                          

                             
               

                             
                                        

                             
           

                             
                                  

                             
                                      

                             
            

                             
                                    

                             
           

                             
                                         

                             
                                         

                             
                               

                             
                                        
 

                                     
 

                             

                             
                                     

                             
                                 

                             
             

                             
                                       

                             
                                  




                                       
            

                             
                                    

                             
      

                             
                                 




                                 
                              







                                    
                                        

                             
            

                             
                                    




                                 
                                        







                                 
                   

                             
                                          

                             
                                       







                                
                            




                                    
            

                             
                                         

                             
                                         







                                   
      

                             
                                        




                                  
                    




                                      
                                           

                             
          

                             
                                         







                                    
                      

                             
                                    

                             
                                       

                             
                                

                             
                                        

                             
           

                             
                                 

                             
                                     




                             
                                        

                             
                                      

                             
                                         







                                      
                                          




                             
                                       

                             
                                       

                             
                                          

                             
                               




                                     
      




                                  
       

                             
                                        

                             
      

                             
                                 




                                
           

                             
                                       

                             
                                    

                             
                            

                             
                                          
 

                                         
 

                             

                             
                                            




                               
                                      




                             
                                  

                             
              

                             
                                         




                                   
                        

                             
                                

                             
                            

                             
                                        
 

                             
 

                             




                                    
                                      
 

                                     
 

                                      

                             
                                         

                             
            

                             
                                

                             
             

                             
                                        
 

                               
 

                             




                                      
     




                                       
            

                             
                                           

                             
                                        

                             
                                        

                             
                                      

                             
                

                             
                                                

                             
                  

                             
                                               

                             
                
 

                             
 

                             

                             
                              

                             
                                      







                                      
                                         

                             
                          




                                    
                                     




                                       
   

                             
                                 

                             
                                      

                             
                                    

                             
                                      

                             
                      

                             
                                                  

                             
     

                             
                                           

                             
                                   

                             
                                        

                             
                                       
 

                                     

                             
           

                             
                                 

                             
                                        

                             
                     

                             
                                  




                             
                                          



                                       

                             
 

                                    

                             
               

                             
                                          



                             

                             
 

                             

                             
                                     

                             
         

                             
                                        

                             
                                        

                             
                                         

                             
                                 

                             
            

                             
                                      

                             
         

                             
                                         

                             
     

                             
                                      

                             
                 

                             
                                          

                             
                     




                                       
                  

                             
                               

                             
                                       

                             
                               

                             
                               




                              
           

                             
                                        




                             
                    

                             
                          




                              
                                       
 

                                      

                             
                                                

                             
                    

                             
                         

                             
                                  

                             
                                     

                             
                                    

                             
                    

                             
                                           

                             
                                     

                             
                        

                             
                                       

                             
     

                             
                                      

                             
                                 




                                        
                                 

                             
                    

                             
                               




                             
                                

                             
                                    

                             
             

                             
                      

                             
                 
 

                                         

                             
                                           

                             
                   

                             
                                   

                             
                          

                             
                                   

                             
                                     




                             
                       

                             
                                          




                             
                                        
 

                             
 

                             
 

                             

                             
                                       
 

                             
 

                             

                             
                                   




                                   
          




                                    
                          

                             
                                     
 




                                 

                             
                      

                             
                                    

                             
                                  

                             
                                     
 

                             
 

                                       

                             
                                    

                             
       

                             
                                  

                             
                                      

                             
                                           

                             
                                   

                             
       

                             
                          

                             
                                  

                             
                               

                             
                             

                             
                                 
 

                             

                             
                                   




                                      
                   

                             
                                      

                             
                            




                             
                                     

                             
                                     

                             
                              

                             
                           

                             
                   

                             
                                

                             
               

                             
                       

                             
                                          

                             
                   

                             
                 

                             
                                      

                             
            

                             
                                      

                             
                      

                             
                                 

                             
                                      

                             
                                        

                             
                        

                             
                                    

                             
                               

                             
                                     

                             
           

                             
                                       
 

                             

                             
                                   

                             
                                  

                             
                          
 

                                 

                             
                                  




                             
                                       

                             
                                       

                             
                                     

                             
                                       

                             
                                  
 

                             
 

                              

                             
                      




                                       
   

                             
                                         

                             
        

                             
                             




                             
                                    

                             
                                         

                             
                                    

                             
        

                             
                           

                             
                                       

                             
                   

                             
                                       

                             
                      

                             
                           

                             
                            

                             
                               

                             
                                    

                             
            

                             
                                       

                             
                       

                             
                                     




                             
                     

                             
                                         

                             
                  

                             
                                                   

                             
                               

                             
                                     

                             
                      

                             
                                             

                             
                               

                             
                                                     

                             
            

                             
                                   

                             
       

                             
                                           




                             
                                        







                                    
                  

                             
                                  

                             
             

                             
                                  




                             
                                    




                             
                               

                             
                                          

                             
                

                             
                                      

                             
                                  

                             
                                      

                             
                 




                                   



                                           
 

                             

                             
                     

                             
                                   




                             
                     

                             
                                     
 

                               
 

                             

                             
                                       




                             
            

                             
                                               




                             
                             

                             
                   







                                 
                                     

                             
                                        

                             
                                      
 

                                




                              
                                     




                             
                                      
 

                              
 

                             

                             
                                      

                             
                                       




                             
                                         

                             
                               

                             
                                         

                             
         

                             
                                         

                             
            

                             
                                   
 

                             

                             
                       

                             
                               

                             
                                     

                             
          




                                      
                                       

                             
                                        

                             
                  

                             
                                     




                             
                                        

                             
               










                                       
                 

                             
                               

                             
                 

                             
                                   

                             
                    
 

                             
 

                             

                             
                                    




                             
                                  

                             
                 






                                     

                                       

                             
                               

                             
                                     



                             




                             

                             
                          

                             
                                         

                             
                  

                             
                           

                             
                                        




                             
                                  

                             
        

                             
                                   

                             
                                  

                             
                                       

                             
       

                             
                                      

                             
                 

                             
                                         

                             
                                 

                             
                                    

                             
                                        

                             
                                     

                             
                         

                             
                          

                             
                                     

                             
                           

                             
                                     

                             
                                 

                             
      

                             
                                       
 

                                   

                             
                                  

                             
                                      

                             
                      







                                   
                                           




                             
                              

                             
                                    

                             
                                  

                             
                 

                             
                                     




                             
                                   

                             
                             

                             
                                    




                                      
          

                             
                                   




                              
                                

                             
                                

                             
                                

                             
                                      




                             
                                   

                             
             

                             
                                 

                             
             

                             
                                     

                             
                           

                             
                       

                             
                               
 

                             

                             
                               

                             
                                        

                             
              

                             
                                      




                             
                            

                             
                                          

                             
                                      

                             
                       

                             
                                      

                             
                

                             
                                     

                             
              




                                    
                                

                             
                                        

                             
        

                             
                              




                                       
                                 

                             
                                

                             
                 
 

                             
 

                             
 

                                        
 

                                

                             
                                       

                             
                                 

                             
                                        

                             
        

                             
                                      

                             
                                 
WEBVTT

00:00:03.600 --> 00:00:04.560
Hello.

00:00:04.560 --> 00:00:06.720
Hopefully everyone is staying safe and

00:00:06.720 --> 00:00:08.000
staying home,

00:00:08.000 --> 00:00:10.000
I feel very grateful to live in a world

00:00:10.000 --> 00:00:12.000
today that technology and free software

00:00:12.000 --> 00:00:13.759
can be leveraged to connect people in

00:00:13.759 --> 00:00:16.080
such disconnected and difficult times,

00:00:16.080 --> 00:00:17.840
and to have an online conference like

00:00:17.840 --> 00:00:19.920
this. Hopefully you've all

00:00:19.920 --> 00:00:22.960
enjoyed this year's EmacsConf so far.

00:00:22.960 --> 00:00:24.720
Many thanks to all the people that made

00:00:24.720 --> 00:00:26.880
this possible.

00:00:26.880 --> 00:00:30.000
Anyways, welcome to my talk "Extend Emacs

00:00:30.000 --> 00:00:30.960
to Modern GUI

00:00:30.960 --> 00:00:34.079
Applications with EAF, the Emacs

00:00:34.079 --> 00:00:35.920
Application Framework".

00:00:35.920 --> 00:00:38.320
This will be my first ever talk, so

00:00:38.320 --> 00:00:39.840
apologies for my

00:00:39.840 --> 00:00:43.280
inexperience, let us begin.

00:00:43.280 --> 00:00:46.559
About me: my name is Matthew Zeng, you can

00:00:46.559 --> 00:00:47.840
also call me MT

00:00:47.840 --> 00:00:50.640
or Mingde. I'm a Chinese Canadian living

00:00:50.640 --> 00:00:51.440
in Toronto,

00:00:51.440 --> 00:00:54.239
Ontario. Offline: I'm an undergrad

00:00:54.239 --> 00:00:56.079
studying mathematics at the University

00:00:56.079 --> 00:00:57.760
of Waterloo.

00:00:57.760 --> 00:01:00.480
Online: I'm one of the admins of the

00:01:00.480 --> 00:01:03.039
Emacs China

00:01:03.039 --> 00:01:06.320
— the largest Emacs forum in China. So,

00:01:06.320 --> 00:01:08.080
to all Chinese listening to my talk right

00:01:08.080 --> 00:01:10.960
now, feel free to check it out.

00:01:10.960 --> 00:01:14.320
And this is a link to my GitHub profile,

00:01:14.320 --> 00:01:16.206
(and) to my projects I'm involved in.

00:01:16.206 --> 00:01:18.240
One's M-EMACS which is

00:01:18.240 --> 00:01:20.159
I'm the author of — a user-friendly

00:01:20.159 --> 00:01:21.840
full-featured Emacs configuration

00:01:21.840 --> 00:01:22.799
distribution,

00:01:22.799 --> 00:01:25.040
it is what I'm using right now, as well

00:01:25.040 --> 00:01:26.880
as the Emacs Application Framework

00:01:26.880 --> 00:01:29.119
which I help to maintain along with the

00:01:29.119 --> 00:01:30.400
other author

00:01:30.400 --> 00:01:33.040
lazycat, which of course, is today's

00:01:33.040 --> 00:01:35.759
topic.

00:01:35.759 --> 00:01:38.720
So, as you all might have already

00:01:38.720 --> 00:01:40.960
noticed I'm currently using Emacs

00:01:40.960 --> 00:01:43.600
and opening navigating closing

00:01:43.600 --> 00:01:45.360
all these websites that are rendered

00:01:45.360 --> 00:01:46.159
properly

00:01:46.159 --> 00:01:49.200
all within Emacs, it's all thanks to the

00:01:49.200 --> 00:01:51.840
EAF project.

00:01:51.840 --> 00:01:54.000
So, we're living in a society that's

00:01:54.000 --> 00:01:55.920
heavily dependent on the internet

00:01:55.920 --> 00:01:59.520
and multimedia, it is unavoidable to run

00:01:59.520 --> 00:02:01.200
to some occasion that you need to

00:02:01.200 --> 00:02:02.880
open a fancy website that uses

00:02:02.880 --> 00:02:04.799
JavaScript and CSS,

00:02:04.799 --> 00:02:08.239
or you need to watch some videos. However,

00:02:08.239 --> 00:02:11.120
due to the nature and history of Emacs,

00:02:11.120 --> 00:02:11.840
it cannot

00:02:11.840 --> 00:02:13.840
render all these modern graphics

00:02:13.840 --> 00:02:16.400
effectively and efficiently.

00:02:16.400 --> 00:02:19.360
Emacs is solely a text-based editing

00:02:19.360 --> 00:02:20.400
environment,

00:02:20.400 --> 00:02:23.520
and I argue that this is not a bad thing,

00:02:23.520 --> 00:02:25.680
in fact, it is one of the reasons that me

00:02:25.680 --> 00:02:27.760
and I believe many of you as well

00:02:27.760 --> 00:02:29.760
are attracted to Emacs in the first

00:02:29.760 --> 00:02:30.879
place.

00:02:30.879 --> 00:02:33.760
Unfortunately, this results in us having

00:02:33.760 --> 00:02:35.680
to open a dedicated web browser to

00:02:35.680 --> 00:02:37.040
browse the internet,

00:02:37.040 --> 00:02:38.879
open a dedicated video player to watch

00:02:38.879 --> 00:02:41.440
some videos, or a PDF renderer to read some

00:02:41.440 --> 00:02:42.640
documents.

00:02:42.640 --> 00:02:45.200
So far Emacs cannot do all these tasks on

00:02:45.200 --> 00:02:46.000
its own

00:02:46.000 --> 00:02:48.080
but can only be achieved using other

00:02:48.080 --> 00:02:51.519
external applications.

00:02:51.519 --> 00:02:55.840
So, the other author manateelazycat,

00:02:55.840 --> 00:02:58.640
or lazycat in short, didn't want to use

00:02:58.640 --> 00:03:00.560
all these external applications,

00:03:00.560 --> 00:03:03.120
he wanted to have an uninterrupted Emacs

00:03:03.120 --> 00:03:04.159
experience,

00:03:04.159 --> 00:03:07.280
he wanted to truly live in Emacs.

00:03:07.280 --> 00:03:10.080
However, it would be a lot of work to

00:03:10.080 --> 00:03:11.040
build this

00:03:11.040 --> 00:03:13.519
modern application from scratch, there's

00:03:13.519 --> 00:03:16.239
simply no time or research to do that.

00:03:16.239 --> 00:03:18.800
So, lazycat thought of utilizing existing

00:03:18.800 --> 00:03:20.400
applications

00:03:20.400 --> 00:03:22.319
and to try to make it collaborate with

00:03:22.319 --> 00:03:24.959
Emacs, there are many solutions available,

00:03:24.959 --> 00:03:26.000
one of it

00:03:26.000 --> 00:03:28.560
is the Emacs X Windows Manager, and I'm

00:03:28.560 --> 00:03:30.159
sure a lot of you already know that —

00:03:30.159 --> 00:03:33.360
the EXWM. However, it didn't work for him,

00:03:33.360 --> 00:03:35.200
because although EXWM opens the

00:03:35.200 --> 00:03:37.440
door to use other applications within

00:03:37.440 --> 00:03:38.239
Emacs,

00:03:38.239 --> 00:03:40.879
it as a fine window manager cannot

00:03:40.879 --> 00:03:41.519
modify,

00:03:41.519 --> 00:03:43.920
customize, or extend other software from

00:03:43.920 --> 00:03:45.040
Emacs.

00:03:45.040 --> 00:03:46.799
For example, it cannot modify the

00:03:46.799 --> 00:03:48.480
behavior when you press a key in

00:03:48.480 --> 00:03:49.599
Chromium or

00:03:49.599 --> 00:03:52.159
PDF viewer, therefore it cannot utilize

00:03:52.159 --> 00:03:54.000
the rich Emacs ecosystem that's been

00:03:54.000 --> 00:03:57.360
growing for almost 40 years.

00:03:57.360 --> 00:04:00.720
On the other hand, in the EAF browser, so,

00:04:00.720 --> 00:04:06.206
if you M-x eaf-open-browser-with-history,

00:04:06.206 --> 00:04:07.200
you can see

00:04:07.200 --> 00:04:09.840
on the lower half of my screen — a list of

00:04:09.840 --> 00:04:11.920
histories sorted by my personal

00:04:11.920 --> 00:04:14.560
most visited sites, and you can search

00:04:14.560 --> 00:04:16.560
for a site that you've been

00:04:16.560 --> 00:04:19.440
to or search for some keyword in a

00:04:19.440 --> 00:04:21.840
search engine.

00:04:21.840 --> 00:04:24.240
So, this is all achieved by utilizing the

00:04:24.240 --> 00:04:25.919
popular completion framework in the

00:04:25.919 --> 00:04:29.280
Emacs ecosystem — ivy.

00:04:29.280 --> 00:04:31.120
So, lazycat decided to develop a

00:04:31.120 --> 00:04:33.680
solution of his own in 2018,

00:04:33.680 --> 00:04:36.960
namely the EAF project, so, I joined the

00:04:36.960 --> 00:04:42.756
development last year, 2019.

00:04:42.756 --> 00:04:44.000
EAF is

00:04:44.000 --> 00:04:47.880
a highly customizable and extensible

00:04:47.880 --> 00:04:49.759
GUI application framework that extends

00:04:49.759 --> 00:04:52.056
Emacs to graphical capabilities using

00:04:52.056 --> 00:04:57.840
PyQt5, and it is not a window manager.

00:04:57.840 --> 00:05:02.479
Alright. So, in the README, you can see a

00:05:02.479 --> 00:05:03.440
list of GIFs

00:05:03.440 --> 00:05:05.600
showcasing all the available EAF

00:05:05.600 --> 00:05:06.720
applications,

00:05:06.720 --> 00:05:09.520
a browser, a markdown previewer, a video

00:05:09.520 --> 00:05:12.789
player, a PDF viewer, and more.

00:05:12.789 --> 00:05:14.240
Today I don't have

00:05:14.240 --> 00:05:16.160
enough time to demonstrate each one of

00:05:16.160 --> 00:05:16.560
them,

00:05:16.560 --> 00:05:18.720
but I will select a couple applications

00:05:18.720 --> 00:05:21.120
to show you.

00:05:21.120 --> 00:05:24.240
So, since we are already using EAF browser,

00:05:24.240 --> 00:05:27.840
we'll start with this. Besides using the

00:05:27.840 --> 00:05:29.600
classic Control n (C-n), Control p (C-p)

00:05:29.600 --> 00:05:32.000
you can also use the Vim style hjkl to

00:05:32.000 --> 00:05:33.840
move up or down.

00:05:33.840 --> 00:05:36.320
Also, Meta Shift comma (M-<) or g (moves) to the

00:05:36.320 --> 00:05:37.280
beginning of page,

00:05:37.280 --> 00:05:39.120
Meta Shift period (M->) or capital g (moves) to

00:05:39.120 --> 00:05:41.199
the end of page.

00:05:41.199 --> 00:05:45.306
Vimium and Surfingkeys

00:05:45.306 --> 00:05:46.479
are popular keyboard-based

00:05:46.479 --> 00:05:48.400
browsing techniques in Chrome,

00:05:48.400 --> 00:05:50.479
and they've imported here as well. You

00:05:50.479 --> 00:05:52.720
can press f to toggle markers pointing

00:05:52.720 --> 00:05:53.039
to

00:05:53.039 --> 00:05:55.280
all the links in the current page, say, I

00:05:55.280 --> 00:05:56.960
want to visit the wiki —

00:05:56.960 --> 00:05:59.680
which comes very very handy when you

00:05:59.680 --> 00:06:02.400
want to configure EAF to your liking,

00:06:02.400 --> 00:06:04.720
so you see the marker on top of wiki is

00:06:04.720 --> 00:06:05.440
dd,

00:06:05.440 --> 00:06:08.479
press dd and Enter (RET), and now

00:06:08.479 --> 00:06:10.240
you are navigated to this link, so you

00:06:10.240 --> 00:06:13.840
don't need to use your mouse at all.

00:06:13.840 --> 00:06:16.560
So, a full list of key bindings can be

00:06:16.560 --> 00:06:17.680
found when you (press)

00:06:17.680 --> 00:06:20.560
Control h m (C-h m), just as any other Emacs major

00:06:20.560 --> 00:06:21.199
mode,

00:06:21.199 --> 00:06:22.960
so you don't have to remember everything…

00:06:22.960 --> 00:06:25.600
all the key bindings I said to you.

00:06:25.600 --> 00:06:28.560
So, this is a global binding application

00:06:28.560 --> 00:06:30.960
to every other EAF application as well.

00:06:30.960 --> 00:06:36.720
You can find it under the wiki in the

00:06:36.720 --> 00:06:37.600
keybindings

00:06:37.600 --> 00:06:40.639
section, so press f again and use

00:06:40.639 --> 00:06:44.240
ns, press Enter (RET), now you're in the

00:06:44.240 --> 00:06:45.600
keybindings web page.

00:06:45.600 --> 00:06:47.520
You can see all of the keybindings

00:06:47.520 --> 00:06:49.280
available in every

00:06:49.280 --> 00:06:53.919
EAF application, and you can try them out,

00:06:53.919 --> 00:06:56.479
and you can customize your key bindings

00:06:56.479 --> 00:06:57.956
using eaf-bind-key,

00:06:57.956 --> 00:07:00.240
you can customize Control n (C-n) as

00:07:00.240 --> 00:07:02.960
in the web page

00:07:02.960 --> 00:07:05.759
to scroll up in the EAF PDF viewer, or you

00:07:05.759 --> 00:07:06.639
can unbind

00:07:06.639 --> 00:07:08.806
an existing binding using

00:07:08.806 --> 00:07:10.000
eaf-bind-key,

00:07:10.000 --> 00:07:14.840
bind it to nil, so it doesn't bind to

00:07:14.840 --> 00:07:16.160
anything.

00:07:16.160 --> 00:07:20.319
Okay, so, here comes the important part,

00:07:20.319 --> 00:07:22.479
if you want to customize EAF, you should

00:07:22.479 --> 00:07:25.440
visit the customization page in the wiki.

00:07:25.440 --> 00:07:28.840
Now, I press Meta b to go back in

00:07:28.840 --> 00:07:30.240
history, and

00:07:30.240 --> 00:07:32.960
go to the customization page, press f,

00:07:32.960 --> 00:07:34.080
press ad,

00:07:34.080 --> 00:07:36.639
Enter, and now we're in the customization

00:07:36.639 --> 00:07:37.360
page.

00:07:37.360 --> 00:07:39.280
So, the first customization option you

00:07:39.280 --> 00:07:42.639
see is dark mode,

00:07:42.639 --> 00:07:44.479
let's say, if you want to turn on the dark

00:07:44.479 --> 00:07:46.720
mode for EAF browser,

00:07:46.720 --> 00:07:48.479
and you don't want to use your mouse to

00:07:48.479 --> 00:07:49.919
do all this stuff.

00:07:49.919 --> 00:07:53.360
You press c, and you can select

00:07:53.360 --> 00:07:55.840
c to toggle the caret browsing, you can

00:07:55.840 --> 00:07:58.240
see a lot of markers available,

00:07:58.240 --> 00:08:01.280
poped up again, but they're not

00:08:01.280 --> 00:08:02.720
on top of links but instead of

00:08:02.720 --> 00:08:03.599
paragraphs.

00:08:03.599 --> 00:08:05.360
You select the paragraph of your choice,

00:08:05.360 --> 00:08:06.639
in this case you want

00:08:06.639 --> 00:08:10.240
ls which comes here,

00:08:10.240 --> 00:08:12.720
and then you just move the

00:08:12.720 --> 00:08:15.120
cursor like what you always do

00:08:15.120 --> 00:08:18.800
in Emacs, and now you select everything

00:08:18.800 --> 00:08:26.479
and use Meta w (M-w) to copy the text.

00:08:26.479 --> 00:08:29.199
Now, we (run) Meta Shift colon (M-:) to evaluate

00:08:29.199 --> 00:08:30.960
what we just copied,

00:08:30.960 --> 00:08:35.120
and set that to true, and

00:08:35.120 --> 00:08:38.320
press r or F5 to refresh the page,

00:08:38.320 --> 00:08:42.159
voilà we have the dark mode enabled.

00:08:42.159 --> 00:08:44.880
So, there are…, well, let's toggle

00:08:44.880 --> 00:08:46.160
it back off for now.

00:08:46.160 --> 00:08:49.360
Now, we (run) Meta Shift colon (M-:) again,

00:08:49.360 --> 00:08:51.600
and we find the one we just used, and

00:08:51.600 --> 00:08:53.519
change it back to false,

00:08:53.519 --> 00:08:56.880
and refresh the page, back in the light

00:08:56.880 --> 00:08:59.360
mode.

00:08:59.360 --> 00:09:02.160
So, there are many other customization

00:09:02.160 --> 00:09:03.680
options available, you can either

00:09:03.680 --> 00:09:05.920
evaluate like what we just did or add it

00:09:05.920 --> 00:09:08.000
to your Emacs configuration file.

00:09:08.000 --> 00:09:11.680
So, in this wiki…,

00:09:11.680 --> 00:09:14.399
you can make the EAF browser to

00:09:14.399 --> 00:09:16.320
continue where you left off

00:09:16.320 --> 00:09:20.160
similar to the Chromium setting.

00:09:20.160 --> 00:09:22.800
You can make EAF the default browser

00:09:22.800 --> 00:09:23.839
(in) Emacs by

00:09:23.839 --> 00:09:26.720
aliasing browse-web to

00:09:26.720 --> 00:09:27.680
eaf-open-browser,

00:09:27.680 --> 00:09:31.200
or set the browse-url-browser-function to

00:09:31.200 --> 00:09:33.519
eaf-open-browser, there's just some tricks.

00:09:33.519 --> 00:09:34.480
And there (is) also

00:09:34.480 --> 00:09:37.920
an experimental adblocker currently

00:09:37.920 --> 00:09:41.680
in place, therefore it can

00:09:41.680 --> 00:09:44.720
block some elements but not all, so

00:09:44.720 --> 00:09:47.279
we really encourage people to help us

00:09:47.279 --> 00:09:48.240
test out and

00:09:48.240 --> 00:09:51.440
add more conditions in.

00:09:51.440 --> 00:09:54.560
So, you can…, the EAF Browser is able to

00:09:54.560 --> 00:09:55.760
download

00:09:55.760 --> 00:09:57.680
any files from the internet, and it will

00:09:57.680 --> 00:10:04.000
be downloaded using Aria2.

00:10:04.000 --> 00:10:05.339
You can also customize

00:10:05.339 --> 00:10:07.200
the eaf-browser-download-path

00:10:07.200 --> 00:10:11.120
using eaf-setq, it's a function that we

00:10:11.120 --> 00:10:13.623
defined similar to setq,

00:10:13.623 --> 00:10:15.040
the normal setq we know.

00:10:15.040 --> 00:10:16.480
So, by default the download file is

00:10:16.480 --> 00:10:18.160
stored in your home directory slash

00:10:18.160 --> 00:10:19.600
downloads,

00:10:19.600 --> 00:10:20.800
and you can change that whenever you

00:10:20.800 --> 00:10:22.720
want. You can also disable

00:10:22.720 --> 00:10:26.079
saving browsing history, so, remember

00:10:26.079 --> 00:10:27.089
when I press…,

00:10:27.089 --> 00:10:28.959
when I use M-x eaf-open-browser's

00:10:28.959 --> 00:10:30.480
history, I see all the

00:10:30.480 --> 00:10:32.079
histories here, but if you want more

00:10:32.079 --> 00:10:33.680
privacy, you don't want that to be

00:10:33.680 --> 00:10:35.360
available at all. You can turn it off

00:10:35.360 --> 00:10:37.356
easily with eaf-setq,

00:10:37.356 --> 00:10:40.640
and set that remember-history to false.

00:10:40.640 --> 00:10:42.399
You can also set your default search

00:10:42.399 --> 00:10:43.839
engine.

00:10:43.839 --> 00:10:47.200
Right now we have Google, although

00:10:47.200 --> 00:10:50.480
not really good but… Google and also

00:10:50.480 --> 00:10:53.600
DuckDuckGo which is a better search engine,

00:10:53.600 --> 00:10:57.360
well, yeah, ethically better search

00:10:57.360 --> 00:10:59.360
engine.

00:10:59.360 --> 00:11:02.560
So, you can also configure

00:11:02.560 --> 00:11:05.040
the zoom. The default zoom of your

00:11:05.040 --> 00:11:07.600
browser is 1.0, you can convert

00:11:07.600 --> 00:11:10.000
default-zoom to 1.25, so when

00:11:10.000 --> 00:11:11.920
you open any web page, it will be

00:11:11.920 --> 00:11:17.360
zoomed by default. You can

00:11:17.360 --> 00:11:20.399
also disable JavaScript, although I

00:11:20.399 --> 00:11:22.240
personally don't really suggest you to

00:11:22.240 --> 00:11:23.440
do, because it will

00:11:23.440 --> 00:11:26.240
basically break a lot of our features,

00:11:26.240 --> 00:11:28.480
because a lot of the browser

00:11:28.480 --> 00:11:29.519
related features

00:11:29.519 --> 00:11:33.760
must be implemented using JavaScript,

00:11:33.760 --> 00:11:35.440
but yeah, you can do it if you really

00:11:35.440 --> 00:11:37.920
want to. And there's also some

00:11:37.920 --> 00:11:41.519
customization on EAF Camera

00:11:41.519 --> 00:11:47.760
you can do as well.

00:11:47.760 --> 00:11:52.399
Let's move on to EAF PDF Viewer.

00:11:52.399 --> 00:11:56.079
Now, let's open

00:11:56.079 --> 00:11:59.440
the PDF file using EAF.

00:11:59.440 --> 00:12:01.519
So, that's one something already here, but

00:12:01.519 --> 00:12:02.720
let's open it here.

00:12:02.720 --> 00:12:06.079
So, eaf-open, and

00:12:06.079 --> 00:12:08.160
select "Introduction to Programming in

00:12:08.160 --> 00:12:11.440
Emacs Lisp".

00:12:11.440 --> 00:12:13.760
I have it already open, but it's okay.

00:12:13.760 --> 00:12:17.040
So, you have the file,

00:12:17.040 --> 00:12:20.160
you have other files displayed…

00:12:20.160 --> 00:12:22.800
you have all the pages display, sorry.

00:12:23.200 --> 00:12:27.040
There are 273 pages in total, but notice

00:12:27.040 --> 00:12:29.279
how fast it is to browse

00:12:29.279 --> 00:12:31.440
all the pages, it is blazingly fast,

00:12:31.440 --> 00:12:33.519
that's all thanks to Python and

00:12:33.519 --> 00:12:37.040
MuPDF which you don't really get from

00:12:37.040 --> 00:12:40.880
Emacs Lisp.

00:12:40.880 --> 00:12:43.600
So, let's say if I want to jump to page

00:12:43.600 --> 00:12:48.639
50. We press p and Enter 50.

00:12:48.639 --> 00:12:53.279
And here we are, we are at page 50.

00:12:53.279 --> 00:12:55.440
You can look at the lower right to

00:12:55.440 --> 00:12:58.880
verify the page you're on.

00:12:58.880 --> 00:13:05.120
You can use i to toggle dark mode

00:13:05.120 --> 00:13:07.839
as expected. Let's say you want to

00:13:07.839 --> 00:13:08.240
find

00:13:08.240 --> 00:13:11.519
table of contents, so use Control s —

00:13:11.519 --> 00:13:15.680
the Emacs default binding for I-search,

00:13:15.680 --> 00:13:19.360
and search for a "table of contents",

00:13:19.360 --> 00:13:21.680
here we are, it is highlighted for you,

00:13:21.680 --> 00:13:23.120
and you can Control s for more but

00:13:23.120 --> 00:13:26.006
there's only one match,

00:13:26.006 --> 00:13:27.200
you (press) Control g (C-g) to

00:13:27.200 --> 00:13:28.800
disable the highlight,

00:13:28.800 --> 00:13:30.880
and you see a lot of options for you to

00:13:30.880 --> 00:13:32.320
go.

00:13:32.320 --> 00:13:35.040
Okay. Let's say, if you want to go to the

00:13:35.040 --> 00:13:36.240
preface.

00:13:36.240 --> 00:13:39.519
That is, you press f which is

00:13:39.519 --> 00:13:40.639
also similar to

00:13:40.639 --> 00:13:44.240
EAF browser, you press f for Vimium,

00:13:44.240 --> 00:13:47.760
and you see the marker, now change to wn,

00:13:47.760 --> 00:13:50.160
press wn, and then you can go to the

00:13:50.160 --> 00:13:51.279
preface.

00:13:51.279 --> 00:13:54.320
Now, we are at the preface.

00:13:54.320 --> 00:13:56.480
So, now you finish reading, you want to

00:13:56.480 --> 00:13:57.600
save your progress?

00:13:57.600 --> 00:13:59.440
No worries, it is already saved for you

00:13:59.440 --> 00:14:01.199
by EAF. You can safely

00:14:01.199 --> 00:14:04.240
close the document using x,

00:14:04.240 --> 00:14:07.519
and opening again, eaf-open,

00:14:07.519 --> 00:14:10.560
and the file…, see you are at

00:14:10.560 --> 00:14:14.000
preface again. You're right at where

00:14:14.000 --> 00:14:16.560
you left of.

00:14:16.560 --> 00:14:19.440
You can also use M-x org-store-link, or

00:14:19.440 --> 00:14:20.480
Control c l (C-c l) —

00:14:20.480 --> 00:14:23.279
which I prefer, if you want to save a

00:14:23.279 --> 00:14:24.480
particular page in

00:14:24.480 --> 00:14:28.240
a Org mode file. Now,

00:14:28.240 --> 00:14:30.320
I go back to my presentation doc, I don't

00:14:30.320 --> 00:14:31.760
need this anymore.

00:14:31.760 --> 00:14:35.600
So, you just (press) Control c Control l (C-c C-l),

00:14:35.600 --> 00:14:39.120
or I think M-x org-insert-link.

00:14:39.120 --> 00:14:41.040
You can find the file right here, and

00:14:41.040 --> 00:14:42.399
you press Enter (RET),

00:14:42.399 --> 00:14:44.320
and you press Enter (RET) for the description

00:14:44.320 --> 00:14:46.480
again, and now it's right here,

00:14:46.480 --> 00:14:50.720
and Control c Control o (C-c C-o) to open it. Voilà!

00:14:50.720 --> 00:14:54.000
You're back.

00:14:54.000 --> 00:14:57.120
Let's now demonstrate the EAF Video

00:14:57.120 --> 00:14:58.880
Player.

00:14:58.880 --> 00:15:02.639
So, M-x eaf-open, you use eaf-open whenever

00:15:02.639 --> 00:15:03.279
you want to

00:15:03.279 --> 00:15:06.079
open some file. You use eaf-open-browser

00:15:06.079 --> 00:15:07.279
if you want to use some

00:15:07.279 --> 00:15:09.920
actual application that's not really

00:15:09.920 --> 00:15:11.199
related to a file.

00:15:11.199 --> 00:15:14.800
So, eaf-open, and select the video

00:15:14.800 --> 00:15:15.600
you want, so,

00:15:15.600 --> 00:15:18.320
video-demo, I already have a video

00:15:18.320 --> 00:15:19.040
demo

00:15:19.040 --> 00:15:21.839
ready, because I recorded a video of

00:15:21.839 --> 00:15:22.720
the demo

00:15:22.720 --> 00:15:26.000
of the EAF Camera, have a look.

00:15:26.000 --> 00:15:28.079
Let's move to the beginning, "Hello people

00:15:28.079 --> 00:15:29.279
from the future!

00:15:29.279 --> 00:15:32.399
This is a demo of the EAF Video Player

00:15:32.399 --> 00:15:35.199
that demos the EAF Camera feature,

00:15:35.199 --> 00:15:37.440
so, as you can see on the screen of me

00:15:37.440 --> 00:15:38.639
inside my camera,

00:15:38.639 --> 00:15:40.959
and the screen is actually with all

00:15:40.959 --> 00:15:42.880
within Emacs.

00:15:42.880 --> 00:15:45.273
(Right, the video itself is as well, haha.)

00:15:45.273 --> 00:15:46.079
You can open this

00:15:46.079 --> 00:15:49.839
using eaf-open-camera

00:15:49.839 --> 00:15:53.040
which I'm already into, and you can

00:15:53.040 --> 00:15:53.600
press

00:15:53.600 --> 00:15:56.720
p to capture a photo,

00:15:56.720 --> 00:15:59.680
so, the photo is by default stored at

00:15:59.680 --> 00:16:02.773
your $HOME/Downloads directory,

00:16:02.773 --> 00:16:04.320
and you can modify it

00:16:04.320 --> 00:16:07.839
freely. If you go here, and you can see

00:16:07.839 --> 00:16:09.519
the camera stored

00:16:09.519 --> 00:16:13.759
right here."

00:16:13.759 --> 00:16:16.240
So, you press Space (SPC) to pause, what I used

00:16:16.240 --> 00:16:17.120
here is

00:16:17.120 --> 00:16:20.320
the eaf-open-this-from-dired.

00:16:20.320 --> 00:16:22.959
Basically, in dired

00:16:22.959 --> 00:16:23.839
you select

00:16:23.839 --> 00:16:26.959
the file that should be opened by

00:16:26.959 --> 00:16:30.320
EAF, and I used that. It detects that

00:16:30.320 --> 00:16:32.720
it wants to use the EAF Image Viewer, so

00:16:32.720 --> 00:16:35.839
I accidentally tested EAF Image Viewer

00:16:35.839 --> 00:16:40.240
before I noticed. That gives the

00:16:40.240 --> 00:16:43.680
image of the photo I just took

00:16:43.680 --> 00:16:47.040
using EAF Camera. As you can see, you

00:16:47.040 --> 00:16:47.360
can

00:16:47.360 --> 00:16:50.720
use hl — the Vim binding to navigate

00:16:50.720 --> 00:16:53.256
in the timestamp in the video,

00:16:53.256 --> 00:16:55.920
and I can use

00:16:55.920 --> 00:17:02.320
jk to change the volumes of the video.

00:17:02.320 --> 00:17:05.520
Alright. Now, you've seen all the basic

00:17:05.520 --> 00:17:06.160
usages

00:17:06.160 --> 00:17:08.720
of the EAF project, it comes the question

00:17:08.720 --> 00:17:11.600
of what is the magic behind it.

00:17:11.600 --> 00:17:14.559
All right. Let's open the hacking page in

00:17:14.559 --> 00:17:15.919
the wiki,

00:17:15.919 --> 00:17:20.400
the design is laid out in a diagram here.

00:17:20.400 --> 00:17:25.120
Let's put it

00:17:25.120 --> 00:17:27.839
side by side along with my text, so

00:17:27.839 --> 00:17:32.320
we can follow through.

00:17:32.320 --> 00:17:36.080
Right, okay. Let me…,

00:17:36.080 --> 00:17:42.320
sorry, let me drink some water.

00:17:42.320 --> 00:17:46.000
This page in the wiki went into a lot

00:17:46.000 --> 00:17:48.160
of detail,

00:17:48.160 --> 00:17:49.520
due to the time constraint I will just

00:17:49.520 --> 00:17:51.679
rephrase some of the ideas here, so for

00:17:51.679 --> 00:17:53.520
anyone interested, please have a look at

00:17:53.520 --> 00:17:55.600
the wiki yourself.

00:17:55.600 --> 00:17:58.160
The easiest way to think about EAF is

00:17:58.160 --> 00:17:58.720
that

00:17:58.720 --> 00:18:01.679
the actual GUI application is started in

00:18:01.679 --> 00:18:02.960
the background,

00:18:02.960 --> 00:18:04.960
then the frame of the application is

00:18:04.960 --> 00:18:07.120
attached to the appropriate location on

00:18:07.120 --> 00:18:07.679
the

00:18:07.679 --> 00:18:10.720
Emacs window. So,

00:18:10.720 --> 00:18:13.440
EAF linked Qt5 with Emacs using

00:18:13.440 --> 00:18:14.960
Elisp and Python.

00:18:14.960 --> 00:18:17.120
On the Python side which is colored

00:18:17.120 --> 00:18:18.640
yellow in the image,

00:18:18.640 --> 00:18:20.439
we have QGraphicsView and

00:18:20.439 --> 00:18:22.960
QGraphicsScene objects.

00:18:22.960 --> 00:18:25.039
These are used to simulate the Emacs

00:18:25.039 --> 00:18:26.640
window buffer design

00:18:26.640 --> 00:18:28.640
where QGraphicsScene is similar to

00:18:28.640 --> 00:18:29.840
buffers in Emacs,

00:18:29.840 --> 00:18:31.840
it controls the state and the content

00:18:31.840 --> 00:18:34.240
details of the application

00:18:34.240 --> 00:18:41.200
where QGraphicsView is similar to Emacs

00:18:41.200 --> 00:18:43.200
window. It populates the buffer

00:18:43.200 --> 00:18:45.919
(QGraphicsScene) to the foreground at

00:18:45.919 --> 00:18:46.960
the appropriate

00:18:46.960 --> 00:18:48.573
position.

00:18:48.573 --> 00:18:50.320
Whenever an EAF mode buffer

00:18:50.320 --> 00:18:57.679
brings to a background….

00:18:57.679 --> 00:18:59.679
Whenever an EAF mode buffer brings to the

00:18:59.679 --> 00:19:00.880
foreground, sorry,

00:19:00.880 --> 00:19:02.559
a QGraphicsView instance is

00:19:02.559 --> 00:19:05.120
created, and whenever the buffer goes to

00:19:05.120 --> 00:19:06.080
the background

00:19:06.080 --> 00:19:08.000
the QGraphicsView instance is then

00:19:08.000 --> 00:19:09.120
deleted,

00:19:09.120 --> 00:19:10.960
while QGraphicsScene — the actual

00:19:10.960 --> 00:19:12.480
process — remains running in the

00:19:12.480 --> 00:19:14.480
background until the EAF mode buffer is

00:19:14.480 --> 00:19:16.000
killed.

00:19:16.000 --> 00:19:18.320
GPU compositing is used to ensure that

00:19:18.320 --> 00:19:19.440
QGraphicsView and

00:19:19.440 --> 00:19:21.840
QGraphicsScene is synchronized real time.

00:19:21.840 --> 00:19:24.000
Using QWindow::setParent function

00:19:24.000 --> 00:19:25.679
the QGraphicsView is attached to the

00:19:25.679 --> 00:19:27.840
appropriate location on the Emacs frame,

00:19:27.840 --> 00:19:30.640
so that although GUI applications are

00:19:30.640 --> 00:19:32.400
not running within Emacs,

00:19:32.400 --> 00:19:36.160
they look as if they were.

00:19:36.160 --> 00:19:39.039
When user types on the keyboard it is

00:19:39.039 --> 00:19:41.039
first received by the Emacs

00:19:41.039 --> 00:19:43.520
EAF mode buffer, and then Elisp sends

00:19:43.520 --> 00:19:45.360
the event to QGraphicsScene using

00:19:45.360 --> 00:19:46.240
D-Bus.

00:19:46.240 --> 00:19:48.720
When user clicks on the GUI application

00:19:48.720 --> 00:19:50.799
it is received by the QGraphicsView

00:19:50.799 --> 00:19:53.280
and processed in Python. Elisp can

00:19:53.280 --> 00:19:55.200
communicate with Python through D-Bus,

00:19:55.200 --> 00:19:59.200
in other words you can

00:19:59.200 --> 00:20:01.360
customize and extend Emacs not just

00:20:01.360 --> 00:20:01.760
using

00:20:01.760 --> 00:20:04.480
Elisp, and now you can use Python, this way

00:20:04.480 --> 00:20:05.360
one can leverage

00:20:05.360 --> 00:20:07.039
all the Python properties like

00:20:07.039 --> 00:20:09.600
multi-threading or some other stuff,

00:20:09.600 --> 00:20:11.679
the entire Python ecosystem can be

00:20:11.679 --> 00:20:13.520
utilized as well,

00:20:13.520 --> 00:20:16.159
such as the Qt web engine that is the

00:20:16.159 --> 00:20:16.960
basis for

00:20:16.960 --> 00:20:20.640
our EAF Browser, and PyMuPDF is the

00:20:20.640 --> 00:20:23.360
basis for the EAF PDF Viewer.

00:20:23.360 --> 00:20:25.840
This really opens the window to many

00:20:25.840 --> 00:20:28.240
many new possibilities to extend Emacs

00:20:28.240 --> 00:20:32.720
using EAF.

00:20:32.720 --> 00:20:36.080
All right, back here. We are always

00:20:36.080 --> 00:20:37.760
looking for people to join the

00:20:37.760 --> 00:20:39.679
development, there are many many

00:20:39.679 --> 00:20:42.720
more work that needs to be done,

00:20:42.720 --> 00:20:44.640
such as testing and debug EAF on

00:20:44.640 --> 00:20:46.640
more Linux distros and window managers

00:20:46.640 --> 00:20:47.760
such as i3

00:20:47.760 --> 00:20:51.200
and stuff, you can also add new EAF

00:20:51.200 --> 00:20:52.080
applications,

00:20:52.080 --> 00:20:54.240
or debug and enhance existing EAF

00:20:54.240 --> 00:20:55.440
applications,

00:20:55.440 --> 00:20:58.000
or you can port EAF to native Wayland

00:20:58.000 --> 00:21:00.240
which I just discussed with

00:21:00.240 --> 00:21:03.840
the emacs-webkit author

00:21:03.840 --> 00:21:07.919
Akira Kyle, and he told me that

00:21:07.919 --> 00:21:11.200
EAF doesn't really work on

00:21:11.200 --> 00:21:14.320
native Wayland, because it uses

00:21:14.320 --> 00:21:16.799
XWayland, so it doesn't work on the pgtk

00:21:16.799 --> 00:21:18.159
port of Emacs.

00:21:18.159 --> 00:21:20.559
And we also need people to port EAF to

00:21:20.559 --> 00:21:22.080
non-free operating systems

00:21:22.080 --> 00:21:25.600
including Windows and macOS,

00:21:25.600 --> 00:21:28.480
and that's because, like, D-Bus is a Linux

00:21:28.480 --> 00:21:30.080
specific feature, so it doesn't really

00:21:30.080 --> 00:21:31.360
work on other platform.

00:21:31.360 --> 00:21:33.039
We need to check, replace it with some

00:21:33.039 --> 00:21:34.640
alternative, and

00:21:34.640 --> 00:21:36.720
QGraphicsScene somehow doesn't really

00:21:36.720 --> 00:21:38.640
work on macOS,

00:21:38.640 --> 00:21:40.320
and there are many other to-do lists

00:21:40.320 --> 00:21:42.880
available, so please have a look

00:21:42.880 --> 00:21:45.039
and see if there is anything you want to

00:21:45.039 --> 00:21:46.640
work on.

00:21:46.640 --> 00:21:49.039
All right. So, since this is a

00:21:49.039 --> 00:21:51.120
pre-recorded talk I won't be able to do

00:21:51.120 --> 00:21:53.520
the Q & A real time in the video.

00:21:53.520 --> 00:21:56.080
However, I will be around on the

00:21:56.080 --> 00:21:57.200
collaborative pad

00:21:57.200 --> 00:22:00.239
and the IRC #emacsconf,

00:22:00.239 --> 00:22:01.360
#emacsconf-questions

00:22:01.360 --> 00:22:04.139
to answer any questions when it pops up,

00:22:04.139 --> 00:22:05.760
and you can also submit an issue

00:22:05.760 --> 00:22:09.120
on the repo, and you can check the wiki

00:22:09.120 --> 00:22:12.640
for some other guides and tricks.

00:22:12.640 --> 00:22:15.039
All right. Thank you guys, and hopefully

00:22:15.039 --> 00:22:16.000
you find

00:22:16.000 --> 00:22:18.320
this EAF project very interesting, and

00:22:18.320 --> 00:22:24.320
enjoy the rest of EmacsConf 2020.