# Extend Emacs to Modern GUI Applications with EAF
Matthew Zeng

[[!template id=vid src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--34-extend-emacs-to-modern-gui-applications-with-eaf--matthew-zeng.webm" size="113M" subtitles="/2020/subtitles/emacsconf-2020--34-extend-emacs-to-modern-gui-applications-with-eaf--matthew-zeng.vtt" duration="22:23"]] 
[Download compressed .webm video (41.7M)](https://media.emacsconf.org/2020/emacsconf-2020--34-extend-emacs-to-modern-gui-applications-with-eaf--matthew-zeng--compressed32.webm)  
[Download compressed .webm video (28.4M, highly compressed)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--34-extend-emacs-to-modern-gui-applications-with-eaf--matthew-zeng--vp9-q56-video-original-audio.webm)  
[View transcript](#transcript)

Emacs Application Framework (EAF) is a customizable and extensible GUI
application framework that extends Emacs graphical capabilities using
PyQt5.  This talk will cover the architecture design of the EAF
project, and demonstrate some of its most useful applications: modern
browser, PDF viewer, video player, etc.

<!-- from the pad --->

- Actual start and end time (EST): Start 2020-11-29T16:05; Stop 2020-11-29T16:28

# Questions

## Q9: Do you think that this tecnology could to be on core of Emacs any time? or fork of Emacs?
Not yet and I don't know if it ever will, since EAF uses many other
dependencies that one needs to install themselves (see README); and I
don't think all of them is GPL (though using open source licenses).

## Q8: I use PDF-Tools currently for my PDFs inside Emacs, would you consider this a better alternative to that and if so why? Although I am definitely trying it because the browser looks incredible, possibly the best implementation of an Emacs browser I have seen, I would love to hear your opinion on the PDFs compared to something like PDF-Tools.
PDF-Tools is great, it would be an awesome option if you can't run EAF
on your machine. However EAF PDF Viewer is just **a lot faster and
smoother** as it uses PyMuPDF as its backend.

- Oh, thats great actually, I have noticed it being a little choppy at
  times, I am excited to try EAF in general because it looks awesome
  and if its faster than pdf-tools I will probably also switch to it
  for my PDFs. Thanks a lot for the talk, one of my favourites in this
  EmacsConf, it gave me a lot of great tools to try inside Emacs!!
- Thank you!!!

Also because PDF-Tools is much older than EAF, it had more attention
and more people working on it, so there are definitely more features
than the current EAF.

## Q7: Can you use the PDF viewer as a viewer for LaTeX files, with reverse search support with e.g. AucTeX?
You could do that with some simple Elisp functions, and EAF PDF Viewer
now updates itself automatically whenever there is a change to the
file.

Reverse search is currently not available, we need more people to help
us work on it! :-)

## Q6: What JavaScript engine is the web browser in EAF using? Also, what web browser engine is it using?
QtWebEngine,. (from the Qt Wiki: )

- Qt WebEngine uses code from the Chromium project. However, it is not
  containing all of Chrome/Chromium;
- Auxiliary services that talk to Google platforms are stripped out
  (nice).
- The codebase is modularized to allow use of system libraries like
  OpenSSL.
- Binary files are stripped out.

## Q5: Does the web rendering happen in a subprocess, or can loading a big page cause Emacs to lag?
Not at all! And that's one of the biggest advantage of the EAF
project, it utilizes all the powerful Python features, like
multithreading.

## Q4: Do you have control over the JavaScript that runs on these pages? Also is there a blocklist feature? (True ad blocking might be impossible, I understand)
As my talk just (or will be shortly) mentioned, you can disable
JavaScript altogether. So far there isn't a blocklist implemented, but
I don't see a reason not to be able to implement this feature in the
near future. EAF itself uses JavaScript (free code) to implement some
browser features (like the Vimium binding), so turning off JavaScript
will make the feature stop working as well.

## Q3: (Feel free to ignore this one if it is off-topic) How big is free software movement in China? Is there any organisation like FSF there?
Very recent years there are A LOT of open source movement in China,
however not free software strictly speaking;

There are a lot of open source clubs in the chinese unversities now
that people actually starting to get interested about open source in
general, that's a huge improvement than decades ago I'd say. There are
still many places to improve.

Although not Free Software Foundation, literally this year the first
ever open source foundation is established in China, called OpenAtom
Foundation: <https://www.openatom.org/#/> (in chinese).

## Q2: Is there anyway to implement EAF without the reparenting behavior from X11?
That's one of the challenges right now to get EAF working on other
platforms. We're always looking for people to help out.

- Are there any ideas on this at all? I can try to help out but don't
  know what's even been tried (and perhaps has already been ruled out).
  - So EAF is currently using `QWindow::setParent`, not Xreparent, so
    it in theory should be able to support at least Windows (IIRC it
    provided API for setParent function to interact with).
  - However `QWindow::setParent` doesn't work on native Wayland, you
    can get more context in here:
    <https://github.com/manateelazycat/emacs-application-framework/issues/449>.

## Q1: Have you experimented with using Hy (aka Hylang, a Lisp that compiles to/runs in Python) for EAF, to avoid having to write "real Python"?
Not yet! Will have a look into it later :-)

# Notes
- One of the admins of the [Emacs China
  forum](https://emacs-china.org/).
- <https://github.com/manateelazycat/emacs-application-framework>

<a name="transcript"></a>
# Transcript

[[!template new="1" text="Hello." start="00:00:03.600" video="mainVideo" id=subtitle]]
[[!template text="Hopefully everyone is staying safe and" start="00:00:04.560" video="mainVideo" id=subtitle]]
[[!template text="staying home," start="00:00:06.720" video="mainVideo" id=subtitle]]
[[!template text="I feel very grateful to live in a world" start="00:00:08.000" video="mainVideo" id=subtitle]]
[[!template text="today that technology and free software" start="00:00:10.000" video="mainVideo" id=subtitle]]
[[!template text="can be leveraged to connect people in" start="00:00:12.000" video="mainVideo" id=subtitle]]
[[!template text="such disconnected and difficult times," start="00:00:13.759" video="mainVideo" id=subtitle]]
[[!template text="and to have an online conference like" start="00:00:16.080" video="mainVideo" id=subtitle]]
[[!template text="this. Hopefully you've all" start="00:00:17.840" video="mainVideo" id=subtitle]]
[[!template text="enjoyed this year's EmacsConf so far." start="00:00:19.920" video="mainVideo" id=subtitle]]
[[!template text="Many thanks to all the people that made" start="00:00:22.960" video="mainVideo" id=subtitle]]
[[!template text="this possible." start="00:00:24.720" video="mainVideo" id=subtitle]]
[[!template text="Anyways, welcome to my talk &quot;Extend Emacs" start="00:00:26.880" video="mainVideo" id=subtitle]]
[[!template text="to Modern GUI" start="00:00:30.000" video="mainVideo" id=subtitle]]
[[!template text="Applications with EAF, the Emacs" start="00:00:30.960" video="mainVideo" id=subtitle]]
[[!template text="Application Framework&quot;." start="00:00:34.079" video="mainVideo" id=subtitle]]
[[!template text="This will be my first ever talk, so" start="00:00:35.920" video="mainVideo" id=subtitle]]
[[!template text="apologies for my" start="00:00:38.320" video="mainVideo" id=subtitle]]
[[!template text="inexperience, let us begin." start="00:00:39.840" video="mainVideo" id=subtitle]]
[[!template text="About me: my name is Matthew Zeng, you can" start="00:00:43.280" video="mainVideo" id=subtitle]]
[[!template text="also call me MT" start="00:00:46.559" video="mainVideo" id=subtitle]]
[[!template text="or Mingde. I'm a Chinese Canadian living" start="00:00:47.840" video="mainVideo" id=subtitle]]
[[!template text="in Toronto," start="00:00:50.640" video="mainVideo" id=subtitle]]
[[!template text="Ontario. Offline: I'm an undergrad" start="00:00:51.440" video="mainVideo" id=subtitle]]
[[!template text="studying mathematics at the University" start="00:00:54.239" video="mainVideo" id=subtitle]]
[[!template text="of Waterloo." start="00:00:56.079" video="mainVideo" id=subtitle]]
[[!template text="Online: I'm one of the admins of the" start="00:00:57.760" video="mainVideo" id=subtitle]]
[[!template text="Emacs China" start="00:01:00.480" video="mainVideo" id=subtitle]]
[[!template text="— the largest Emacs forum in China. So," start="00:01:03.039" video="mainVideo" id=subtitle]]
[[!template text="to all Chinese listening to my talk right" start="00:01:06.320" video="mainVideo" id=subtitle]]
[[!template text="now, feel free to check it out." start="00:01:08.080" video="mainVideo" id=subtitle]]
[[!template text="And this is a link to my GitHub profile," start="00:01:10.960" video="mainVideo" id=subtitle]]
[[!template text="(and) to my projects I'm involved in." start="00:01:14.320" video="mainVideo" id=subtitle]]
[[!template text="One's M-EMACS which is" start="00:01:16.206" video="mainVideo" id=subtitle]]
[[!template text="I'm the author of — a user-friendly" start="00:01:18.240" video="mainVideo" id=subtitle]]
[[!template text="full-featured Emacs configuration" start="00:01:20.159" video="mainVideo" id=subtitle]]
[[!template text="distribution," start="00:01:21.840" video="mainVideo" id=subtitle]]
[[!template text="it is what I'm using right now, as well" start="00:01:22.799" video="mainVideo" id=subtitle]]
[[!template text="as the Emacs Application Framework" start="00:01:25.040" video="mainVideo" id=subtitle]]
[[!template text="which I help to maintain along with the" start="00:01:26.880" video="mainVideo" id=subtitle]]
[[!template text="other author" start="00:01:29.119" video="mainVideo" id=subtitle]]
[[!template text="lazycat, which of course, is today's" start="00:01:30.400" video="mainVideo" id=subtitle]]
[[!template text="topic." start="00:01:33.040" video="mainVideo" id=subtitle]]
[[!template new="1" text="So, as you all might have already" start="00:01:35.759" video="mainVideo" id=subtitle]]
[[!template text="noticed I'm currently using Emacs" start="00:01:38.720" video="mainVideo" id=subtitle]]
[[!template text="and opening navigating closing" start="00:01:40.960" video="mainVideo" id=subtitle]]
[[!template text="all these websites that are rendered" start="00:01:43.600" video="mainVideo" id=subtitle]]
[[!template text="properly" start="00:01:45.360" video="mainVideo" id=subtitle]]
[[!template text="all within Emacs, it's all thanks to the" start="00:01:46.159" video="mainVideo" id=subtitle]]
[[!template text="EAF project." start="00:01:49.200" video="mainVideo" id=subtitle]]
[[!template text="So, we're living in a society that's" start="00:01:51.840" video="mainVideo" id=subtitle]]
[[!template text="heavily dependent on the internet" start="00:01:54.000" video="mainVideo" id=subtitle]]
[[!template text="and multimedia, it is unavoidable to run" start="00:01:55.920" video="mainVideo" id=subtitle]]
[[!template text="to some occasion that you need to" start="00:01:59.520" video="mainVideo" id=subtitle]]
[[!template text="open a fancy website that uses" start="00:02:01.200" video="mainVideo" id=subtitle]]
[[!template text="JavaScript and CSS," start="00:02:02.880" video="mainVideo" id=subtitle]]
[[!template text="or you need to watch some videos. However," start="00:02:04.799" video="mainVideo" id=subtitle]]
[[!template text="due to the nature and history of Emacs," start="00:02:08.239" video="mainVideo" id=subtitle]]
[[!template text="it cannot" start="00:02:11.120" video="mainVideo" id=subtitle]]
[[!template text="render all these modern graphics" start="00:02:11.840" video="mainVideo" id=subtitle]]
[[!template text="effectively and efficiently." start="00:02:13.840" video="mainVideo" id=subtitle]]
[[!template text="Emacs is solely a text-based editing" start="00:02:16.400" video="mainVideo" id=subtitle]]
[[!template text="environment," start="00:02:19.360" video="mainVideo" id=subtitle]]
[[!template text="and I argue that this is not a bad thing," start="00:02:20.400" video="mainVideo" id=subtitle]]
[[!template text="in fact, it is one of the reasons that me" start="00:02:23.520" video="mainVideo" id=subtitle]]
[[!template text="and I believe many of you as well" start="00:02:25.680" video="mainVideo" id=subtitle]]
[[!template text="are attracted to Emacs in the first" start="00:02:27.760" video="mainVideo" id=subtitle]]
[[!template text="place." start="00:02:29.760" video="mainVideo" id=subtitle]]
[[!template text="Unfortunately, this results in us having" start="00:02:30.879" video="mainVideo" id=subtitle]]
[[!template text="to open a dedicated web browser to" start="00:02:33.760" video="mainVideo" id=subtitle]]
[[!template text="browse the internet," start="00:02:35.680" video="mainVideo" id=subtitle]]
[[!template text="open a dedicated video player to watch" start="00:02:37.040" video="mainVideo" id=subtitle]]
[[!template text="some videos, or a PDF renderer to read some" start="00:02:38.879" video="mainVideo" id=subtitle]]
[[!template text="documents." start="00:02:41.440" video="mainVideo" id=subtitle]]
[[!template text="So far Emacs cannot do all these tasks on" start="00:02:42.640" video="mainVideo" id=subtitle]]
[[!template text="its own" start="00:02:45.200" video="mainVideo" id=subtitle]]
[[!template text="but can only be achieved using other" start="00:02:46.000" video="mainVideo" id=subtitle]]
[[!template text="external applications." start="00:02:48.080" video="mainVideo" id=subtitle]]
[[!template text="So, the other author manateelazycat," start="00:02:51.519" video="mainVideo" id=subtitle]]
[[!template text="or lazycat in short, didn't want to use" start="00:02:55.840" video="mainVideo" id=subtitle]]
[[!template text="all these external applications," start="00:02:58.640" video="mainVideo" id=subtitle]]
[[!template text="he wanted to have an uninterrupted Emacs" start="00:03:00.560" video="mainVideo" id=subtitle]]
[[!template text="experience," start="00:03:03.120" video="mainVideo" id=subtitle]]
[[!template text="he wanted to truly live in Emacs." start="00:03:04.159" video="mainVideo" id=subtitle]]
[[!template text="However, it would be a lot of work to" start="00:03:07.280" video="mainVideo" id=subtitle]]
[[!template text="build this" start="00:03:10.080" video="mainVideo" id=subtitle]]
[[!template text="modern application from scratch, there's" start="00:03:11.040" video="mainVideo" id=subtitle]]
[[!template text="simply no time or research to do that." start="00:03:13.519" video="mainVideo" id=subtitle]]
[[!template text="So, lazycat thought of utilizing existing" start="00:03:16.239" video="mainVideo" id=subtitle]]
[[!template text="applications" start="00:03:18.800" video="mainVideo" id=subtitle]]
[[!template text="and to try to make it collaborate with" start="00:03:20.400" video="mainVideo" id=subtitle]]
[[!template text="Emacs, there are many solutions available," start="00:03:22.319" video="mainVideo" id=subtitle]]
[[!template text="one of it" start="00:03:24.959" video="mainVideo" id=subtitle]]
[[!template text="is the Emacs X Windows Manager, and I'm" start="00:03:26.000" video="mainVideo" id=subtitle]]
[[!template text="sure a lot of you already know that —" start="00:03:28.560" video="mainVideo" id=subtitle]]
[[!template text="the EXWM. However, it didn't work for him," start="00:03:30.159" video="mainVideo" id=subtitle]]
[[!template text="because although EXWM opens the" start="00:03:33.360" video="mainVideo" id=subtitle]]
[[!template text="door to use other applications within" start="00:03:35.200" video="mainVideo" id=subtitle]]
[[!template text="Emacs," start="00:03:37.440" video="mainVideo" id=subtitle]]
[[!template text="it as a fine window manager cannot" start="00:03:38.239" video="mainVideo" id=subtitle]]
[[!template text="modify," start="00:03:40.879" video="mainVideo" id=subtitle]]
[[!template text="customize, or extend other software from" start="00:03:41.519" video="mainVideo" id=subtitle]]
[[!template text="Emacs." start="00:03:43.920" video="mainVideo" id=subtitle]]
[[!template text="For example, it cannot modify the" start="00:03:45.040" video="mainVideo" id=subtitle]]
[[!template text="behavior when you press a key in" start="00:03:46.799" video="mainVideo" id=subtitle]]
[[!template text="Chromium or" start="00:03:48.480" video="mainVideo" id=subtitle]]
[[!template text="PDF viewer, therefore it cannot utilize" start="00:03:49.599" video="mainVideo" id=subtitle]]
[[!template text="the rich Emacs ecosystem that's been" start="00:03:52.159" video="mainVideo" id=subtitle]]
[[!template text="growing for almost 40 years." start="00:03:54.000" video="mainVideo" id=subtitle]]
[[!template new="1" text="On the other hand, in the EAF browser, so," start="00:03:57.360" video="mainVideo" id=subtitle]]
[[!template text="if you M-x eaf-open-browser-with-history," start="00:04:00.720" video="mainVideo" id=subtitle]]
[[!template text="you can see" start="00:04:06.206" video="mainVideo" id=subtitle]]
[[!template text="on the lower half of my screen — a list of" start="00:04:07.200" video="mainVideo" id=subtitle]]
[[!template text="histories sorted by my personal" start="00:04:09.840" video="mainVideo" id=subtitle]]
[[!template text="most visited sites, and you can search" start="00:04:11.920" video="mainVideo" id=subtitle]]
[[!template text="for a site that you've been" start="00:04:14.560" video="mainVideo" id=subtitle]]
[[!template text="to or search for some keyword in a" start="00:04:16.560" video="mainVideo" id=subtitle]]
[[!template text="search engine." start="00:04:19.440" video="mainVideo" id=subtitle]]
[[!template text="So, this is all achieved by utilizing the" start="00:04:21.840" video="mainVideo" id=subtitle]]
[[!template text="popular completion framework in the" start="00:04:24.240" video="mainVideo" id=subtitle]]
[[!template text="Emacs ecosystem — ivy." start="00:04:25.919" video="mainVideo" id=subtitle]]
[[!template text="So, lazycat decided to develop a" start="00:04:29.280" video="mainVideo" id=subtitle]]
[[!template text="solution of his own in 2018," start="00:04:31.120" video="mainVideo" id=subtitle]]
[[!template text="namely the EAF project, so, I joined the" start="00:04:33.680" video="mainVideo" id=subtitle]]
[[!template text="development last year, 2019." start="00:04:36.960" video="mainVideo" id=subtitle]]
[[!template text="EAF is" start="00:04:42.756" video="mainVideo" id=subtitle]]
[[!template text="a highly customizable and extensible" start="00:04:44.000" video="mainVideo" id=subtitle]]
[[!template text="GUI application framework that extends" start="00:04:47.880" video="mainVideo" id=subtitle]]
[[!template text="Emacs to graphical capabilities using" start="00:04:49.759" video="mainVideo" id=subtitle]]
[[!template text="PyQt5, and it is not a window manager." start="00:04:52.056" video="mainVideo" id=subtitle]]
[[!template text="Alright. So, in the README, you can see a" start="00:04:57.840" video="mainVideo" id=subtitle]]
[[!template text="list of GIFs" start="00:05:02.479" video="mainVideo" id=subtitle]]
[[!template text="showcasing all the available EAF" start="00:05:03.440" video="mainVideo" id=subtitle]]
[[!template text="applications," start="00:05:05.600" video="mainVideo" id=subtitle]]
[[!template text="a browser, a markdown previewer, a video" start="00:05:06.720" video="mainVideo" id=subtitle]]
[[!template text="player, a PDF viewer, and more." start="00:05:09.520" video="mainVideo" id=subtitle]]
[[!template text="Today I don't have" start="00:05:12.789" video="mainVideo" id=subtitle]]
[[!template text="enough time to demonstrate each one of" start="00:05:14.240" video="mainVideo" id=subtitle]]
[[!template text="them," start="00:05:16.160" video="mainVideo" id=subtitle]]
[[!template text="but I will select a couple applications" start="00:05:16.560" video="mainVideo" id=subtitle]]
[[!template text="to show you." start="00:05:18.720" video="mainVideo" id=subtitle]]
[[!template new="1" text="So, since we are already using EAF browser," start="00:05:21.120" video="mainVideo" id=subtitle]]
[[!template text="we'll start with this. Besides using the" start="00:05:24.240" video="mainVideo" id=subtitle]]
[[!template text="classic Control n (C-n), Control p (C-p)" start="00:05:27.840" video="mainVideo" id=subtitle]]
[[!template text="you can also use the Vim style hjkl to" start="00:05:29.600" video="mainVideo" id=subtitle]]
[[!template text="move up or down." start="00:05:32.000" video="mainVideo" id=subtitle]]
[[!template text="Also, Meta Shift comma (M-<) or g (moves) to the" start="00:05:33.840" video="mainVideo" id=subtitle]]
[[!template text="beginning of page," start="00:05:36.320" video="mainVideo" id=subtitle]]
[[!template text="Meta Shift period (M->) or capital g (moves) to" start="00:05:37.280" video="mainVideo" id=subtitle]]
[[!template text="the end of page." start="00:05:39.120" video="mainVideo" id=subtitle]]
[[!template text="Vimium and Surfingkeys" start="00:05:41.199" video="mainVideo" id=subtitle]]
[[!template text="are popular keyboard-based" start="00:05:45.306" video="mainVideo" id=subtitle]]
[[!template text="browsing techniques in Chrome," start="00:05:46.479" video="mainVideo" id=subtitle]]
[[!template text="and they've imported here as well. You" start="00:05:48.400" video="mainVideo" id=subtitle]]
[[!template text="can press f to toggle markers pointing" start="00:05:50.479" video="mainVideo" id=subtitle]]
[[!template text="to" start="00:05:52.720" video="mainVideo" id=subtitle]]
[[!template text="all the links in the current page, say, I" start="00:05:53.039" video="mainVideo" id=subtitle]]
[[!template text="want to visit the wiki —" start="00:05:55.280" video="mainVideo" id=subtitle]]
[[!template text="which comes very very handy when you" start="00:05:56.960" video="mainVideo" id=subtitle]]
[[!template text="want to configure EAF to your liking," start="00:05:59.680" video="mainVideo" id=subtitle]]
[[!template text="so you see the marker on top of wiki is" start="00:06:02.400" video="mainVideo" id=subtitle]]
[[!template text="dd," start="00:06:04.720" video="mainVideo" id=subtitle]]
[[!template text="press dd and Enter (RET), and now" start="00:06:05.440" video="mainVideo" id=subtitle]]
[[!template text="you are navigated to this link, so you" start="00:06:08.479" video="mainVideo" id=subtitle]]
[[!template text="don't need to use your mouse at all." start="00:06:10.240" video="mainVideo" id=subtitle]]
[[!template new="1" text="So, a full list of key bindings can be" start="00:06:13.840" video="mainVideo" id=subtitle]]
[[!template text="found when you (press)" start="00:06:16.560" video="mainVideo" id=subtitle]]
[[!template text="Control h m (C-h m), just as any other Emacs major" start="00:06:17.680" video="mainVideo" id=subtitle]]
[[!template text="mode," start="00:06:20.560" video="mainVideo" id=subtitle]]
[[!template text="so you don't have to remember everything…" start="00:06:21.199" video="mainVideo" id=subtitle]]
[[!template text="all the key bindings I said to you." start="00:06:22.960" video="mainVideo" id=subtitle]]
[[!template text="So, this is a global binding application" start="00:06:25.600" video="mainVideo" id=subtitle]]
[[!template text="to every other EAF application as well." start="00:06:28.560" video="mainVideo" id=subtitle]]
[[!template text="You can find it under the wiki in the" start="00:06:30.960" video="mainVideo" id=subtitle]]
[[!template text="keybindings" start="00:06:36.720" video="mainVideo" id=subtitle]]
[[!template text="section, so press f again and use" start="00:06:37.600" video="mainVideo" id=subtitle]]
[[!template text="ns, press Enter (RET), now you're in the" start="00:06:40.639" video="mainVideo" id=subtitle]]
[[!template text="keybindings web page." start="00:06:44.240" video="mainVideo" id=subtitle]]
[[!template text="You can see all of the keybindings" start="00:06:45.600" video="mainVideo" id=subtitle]]
[[!template text="available in every" start="00:06:47.520" video="mainVideo" id=subtitle]]
[[!template text="EAF application, and you can try them out," start="00:06:49.280" video="mainVideo" id=subtitle]]
[[!template text="and you can customize your key bindings" start="00:06:53.919" video="mainVideo" id=subtitle]]
[[!template text="using eaf-bind-key," start="00:06:56.479" video="mainVideo" id=subtitle]]
[[!template text="you can customize Control n (C-n) as" start="00:06:57.956" video="mainVideo" id=subtitle]]
[[!template text="in the web page" start="00:07:00.240" video="mainVideo" id=subtitle]]
[[!template text="to scroll up in the EAF PDF viewer, or you" start="00:07:02.960" video="mainVideo" id=subtitle]]
[[!template text="can unbind" start="00:07:05.759" video="mainVideo" id=subtitle]]
[[!template text="an existing binding using" start="00:07:06.639" video="mainVideo" id=subtitle]]
[[!template text="eaf-bind-key," start="00:07:08.806" video="mainVideo" id=subtitle]]
[[!template text="bind it to nil, so it doesn't bind to" start="00:07:10.000" video="mainVideo" id=subtitle]]
[[!template text="anything." start="00:07:14.840" video="mainVideo" id=subtitle]]
[[!template text="Okay, so, here comes the important part," start="00:07:16.160" video="mainVideo" id=subtitle]]
[[!template text="if you want to customize EAF, you should" start="00:07:20.319" video="mainVideo" id=subtitle]]
[[!template text="visit the customization page in the wiki." start="00:07:22.479" video="mainVideo" id=subtitle]]
[[!template text="Now, I press Meta b to go back in" start="00:07:25.440" video="mainVideo" id=subtitle]]
[[!template text="history, and" start="00:07:28.840" video="mainVideo" id=subtitle]]
[[!template text="go to the customization page, press f," start="00:07:30.240" video="mainVideo" id=subtitle]]
[[!template text="press ad," start="00:07:32.960" video="mainVideo" id=subtitle]]
[[!template text="Enter, and now we're in the customization" start="00:07:34.080" video="mainVideo" id=subtitle]]
[[!template text="page." start="00:07:36.639" video="mainVideo" id=subtitle]]
[[!template text="So, the first customization option you" start="00:07:37.360" video="mainVideo" id=subtitle]]
[[!template text="see is dark mode," start="00:07:39.280" video="mainVideo" id=subtitle]]
[[!template text="let's say, if you want to turn on the dark" start="00:07:42.639" video="mainVideo" id=subtitle]]
[[!template text="mode for EAF browser," start="00:07:44.479" video="mainVideo" id=subtitle]]
[[!template text="and you don't want to use your mouse to" start="00:07:46.720" video="mainVideo" id=subtitle]]
[[!template text="do all this stuff." start="00:07:48.479" video="mainVideo" id=subtitle]]
[[!template text="You press c, and you can select" start="00:07:49.919" video="mainVideo" id=subtitle]]
[[!template text="c to toggle the caret browsing, you can" start="00:07:53.360" video="mainVideo" id=subtitle]]
[[!template text="see a lot of markers available," start="00:07:55.840" video="mainVideo" id=subtitle]]
[[!template text="poped up again, but they're not" start="00:07:58.240" video="mainVideo" id=subtitle]]
[[!template text="on top of links but instead of" start="00:08:01.280" video="mainVideo" id=subtitle]]
[[!template text="paragraphs." start="00:08:02.720" video="mainVideo" id=subtitle]]
[[!template text="You select the paragraph of your choice," start="00:08:03.599" video="mainVideo" id=subtitle]]
[[!template text="in this case you want" start="00:08:05.360" video="mainVideo" id=subtitle]]
[[!template text="ls which comes here," start="00:08:06.639" video="mainVideo" id=subtitle]]
[[!template text="and then you just move the" start="00:08:10.240" video="mainVideo" id=subtitle]]
[[!template text="cursor like what you always do" start="00:08:12.720" video="mainVideo" id=subtitle]]
[[!template text="in Emacs, and now you select everything" start="00:08:15.120" video="mainVideo" id=subtitle]]
[[!template text="and use Meta w (M-w) to copy the text." start="00:08:18.800" video="mainVideo" id=subtitle]]
[[!template text="Now, we (run) Meta Shift colon (M-:) to evaluate" start="00:08:26.479" video="mainVideo" id=subtitle]]
[[!template text="what we just copied," start="00:08:29.199" video="mainVideo" id=subtitle]]
[[!template text="and set that to true, and" start="00:08:30.960" video="mainVideo" id=subtitle]]
[[!template text="press r or F5 to refresh the page," start="00:08:35.120" video="mainVideo" id=subtitle]]
[[!template text="voilà we have the dark mode enabled." start="00:08:38.320" video="mainVideo" id=subtitle]]
[[!template text="So, there are…, well, let's toggle" start="00:08:42.159" video="mainVideo" id=subtitle]]
[[!template text="it back off for now." start="00:08:44.880" video="mainVideo" id=subtitle]]
[[!template text="Now, we (run) Meta Shift colon (M-:) again," start="00:08:46.160" video="mainVideo" id=subtitle]]
[[!template text="and we find the one we just used, and" start="00:08:49.360" video="mainVideo" id=subtitle]]
[[!template text="change it back to false," start="00:08:51.600" video="mainVideo" id=subtitle]]
[[!template text="and refresh the page, back in the light" start="00:08:53.519" video="mainVideo" id=subtitle]]
[[!template text="mode." start="00:08:56.880" video="mainVideo" id=subtitle]]
[[!template text="So, there are many other customization" start="00:08:59.360" video="mainVideo" id=subtitle]]
[[!template text="options available, you can either" start="00:09:02.160" video="mainVideo" id=subtitle]]
[[!template text="evaluate like what we just did or add it" start="00:09:03.680" video="mainVideo" id=subtitle]]
[[!template text="to your Emacs configuration file." start="00:09:05.920" video="mainVideo" id=subtitle]]
[[!template text="So, in this wiki…," start="00:09:08.000" video="mainVideo" id=subtitle]]
[[!template text="you can make the EAF browser to" start="00:09:11.680" video="mainVideo" id=subtitle]]
[[!template text="continue where you left off" start="00:09:14.399" video="mainVideo" id=subtitle]]
[[!template text="similar to the Chromium setting." start="00:09:16.320" video="mainVideo" id=subtitle]]
[[!template text="You can make EAF the default browser" start="00:09:20.160" video="mainVideo" id=subtitle]]
[[!template text="(in) Emacs by" start="00:09:22.800" video="mainVideo" id=subtitle]]
[[!template text="aliasing browse-web to" start="00:09:23.839" video="mainVideo" id=subtitle]]
[[!template text="eaf-open-browser," start="00:09:26.720" video="mainVideo" id=subtitle]]
[[!template text="or set the browse-url-browser-function to" start="00:09:27.680" video="mainVideo" id=subtitle]]
[[!template text="eaf-open-browser, there's just some tricks." start="00:09:31.200" video="mainVideo" id=subtitle]]
[[!template text="And there (is) also" start="00:09:33.519" video="mainVideo" id=subtitle]]
[[!template text="an experimental adblocker currently" start="00:09:34.480" video="mainVideo" id=subtitle]]
[[!template text="in place, therefore it can" start="00:09:37.920" video="mainVideo" id=subtitle]]
[[!template text="block some elements but not all, so" start="00:09:41.680" video="mainVideo" id=subtitle]]
[[!template text="we really encourage people to help us" start="00:09:44.720" video="mainVideo" id=subtitle]]
[[!template text="test out and" start="00:09:47.279" video="mainVideo" id=subtitle]]
[[!template text="add more conditions in." start="00:09:48.240" video="mainVideo" id=subtitle]]
[[!template text="So, you can…, the EAF Browser is able to" start="00:09:51.440" video="mainVideo" id=subtitle]]
[[!template text="download" start="00:09:54.560" video="mainVideo" id=subtitle]]
[[!template text="any files from the internet, and it will" start="00:09:55.760" video="mainVideo" id=subtitle]]
[[!template text="be downloaded using Aria2." start="00:09:57.680" video="mainVideo" id=subtitle]]
[[!template text="You can also customize" start="00:10:04.000" video="mainVideo" id=subtitle]]
[[!template text="the eaf-browser-download-path" start="00:10:05.339" video="mainVideo" id=subtitle]]
[[!template text="using eaf-setq, it's a function that we" start="00:10:07.200" video="mainVideo" id=subtitle]]
[[!template text="defined similar to setq," start="00:10:11.120" video="mainVideo" id=subtitle]]
[[!template text="the normal setq we know." start="00:10:13.623" video="mainVideo" id=subtitle]]
[[!template text="So, by default the download file is" start="00:10:15.040" video="mainVideo" id=subtitle]]
[[!template text="stored in your home directory slash" start="00:10:16.480" video="mainVideo" id=subtitle]]
[[!template text="downloads," start="00:10:18.160" video="mainVideo" id=subtitle]]
[[!template text="and you can change that whenever you" start="00:10:19.600" video="mainVideo" id=subtitle]]
[[!template text="want. You can also disable" start="00:10:20.800" video="mainVideo" id=subtitle]]
[[!template text="saving browsing history, so, remember" start="00:10:22.720" video="mainVideo" id=subtitle]]
[[!template text="when I press…," start="00:10:26.079" video="mainVideo" id=subtitle]]
[[!template text="when I use M-x eaf-open-browser's" start="00:10:27.089" video="mainVideo" id=subtitle]]
[[!template text="history, I see all the" start="00:10:28.959" video="mainVideo" id=subtitle]]
[[!template text="histories here, but if you want more" start="00:10:30.480" video="mainVideo" id=subtitle]]
[[!template text="privacy, you don't want that to be" start="00:10:32.079" video="mainVideo" id=subtitle]]
[[!template text="available at all. You can turn it off" start="00:10:33.680" video="mainVideo" id=subtitle]]
[[!template text="easily with eaf-setq," start="00:10:35.360" video="mainVideo" id=subtitle]]
[[!template text="and set that remember-history to false." start="00:10:37.356" video="mainVideo" id=subtitle]]
[[!template text="You can also set your default search" start="00:10:40.640" video="mainVideo" id=subtitle]]
[[!template text="engine." start="00:10:42.399" video="mainVideo" id=subtitle]]
[[!template text="Right now we have Google, although" start="00:10:43.839" video="mainVideo" id=subtitle]]
[[!template text="not really good but… Google and also" start="00:10:47.200" video="mainVideo" id=subtitle]]
[[!template text="DuckDuckGo which is a better search engine," start="00:10:50.480" video="mainVideo" id=subtitle]]
[[!template text="well, yeah, ethically better search" start="00:10:53.600" video="mainVideo" id=subtitle]]
[[!template text="engine." start="00:10:57.360" video="mainVideo" id=subtitle]]
[[!template text="So, you can also configure" start="00:10:59.360" video="mainVideo" id=subtitle]]
[[!template text="the zoom. The default zoom of your" start="00:11:02.560" video="mainVideo" id=subtitle]]
[[!template text="browser is 1.0, you can convert" start="00:11:05.040" video="mainVideo" id=subtitle]]
[[!template text="default-zoom to 1.25, so when" start="00:11:07.600" video="mainVideo" id=subtitle]]
[[!template text="you open any web page, it will be" start="00:11:10.000" video="mainVideo" id=subtitle]]
[[!template text="zoomed by default. You can" start="00:11:11.920" video="mainVideo" id=subtitle]]
[[!template text="also disable JavaScript, although I" start="00:11:17.360" video="mainVideo" id=subtitle]]
[[!template text="personally don't really suggest you to" start="00:11:20.399" video="mainVideo" id=subtitle]]
[[!template text="do, because it will" start="00:11:22.240" video="mainVideo" id=subtitle]]
[[!template text="basically break a lot of our features," start="00:11:23.440" video="mainVideo" id=subtitle]]
[[!template text="because a lot of the browser" start="00:11:26.240" video="mainVideo" id=subtitle]]
[[!template text="related features" start="00:11:28.480" video="mainVideo" id=subtitle]]
[[!template text="must be implemented using JavaScript," start="00:11:29.519" video="mainVideo" id=subtitle]]
[[!template text="but yeah, you can do it if you really" start="00:11:33.760" video="mainVideo" id=subtitle]]
[[!template text="want to. And there's also some" start="00:11:35.440" video="mainVideo" id=subtitle]]
[[!template text="customization on EAF Camera" start="00:11:37.920" video="mainVideo" id=subtitle]]
[[!template text="you can do as well." start="00:11:41.519" video="mainVideo" id=subtitle]]
[[!template new="1" text="Let's move on to EAF PDF Viewer." start="00:11:47.760" video="mainVideo" id=subtitle]]
[[!template text="Now, let's open" start="00:11:52.399" video="mainVideo" id=subtitle]]
[[!template text="the PDF file using EAF." start="00:11:56.079" video="mainVideo" id=subtitle]]
[[!template text="So, that's one something already here, but" start="00:11:59.440" video="mainVideo" id=subtitle]]
[[!template text="let's open it here." start="00:12:01.519" video="mainVideo" id=subtitle]]
[[!template text="So, eaf-open, and" start="00:12:02.720" video="mainVideo" id=subtitle]]
[[!template text="select &quot;Introduction to Programming in" start="00:12:06.079" video="mainVideo" id=subtitle]]
[[!template text="Emacs Lisp&quot;." start="00:12:08.160" video="mainVideo" id=subtitle]]
[[!template text="I have it already open, but it's okay." start="00:12:11.440" video="mainVideo" id=subtitle]]
[[!template text="So, you have the file," start="00:12:13.760" video="mainVideo" id=subtitle]]
[[!template text="you have other files displayed…" start="00:12:17.040" video="mainVideo" id=subtitle]]
[[!template text="you have all the pages display, sorry." start="00:12:20.160" video="mainVideo" id=subtitle]]
[[!template text="There are 273 pages in total, but notice" start="00:12:23.200" video="mainVideo" id=subtitle]]
[[!template text="how fast it is to browse" start="00:12:27.040" video="mainVideo" id=subtitle]]
[[!template text="all the pages, it is blazingly fast," start="00:12:29.279" video="mainVideo" id=subtitle]]
[[!template text="that's all thanks to Python and" start="00:12:31.440" video="mainVideo" id=subtitle]]
[[!template text="MuPDF which you don't really get from" start="00:12:33.519" video="mainVideo" id=subtitle]]
[[!template text="Emacs Lisp." start="00:12:37.040" video="mainVideo" id=subtitle]]
[[!template text="So, let's say if I want to jump to page" start="00:12:40.880" video="mainVideo" id=subtitle]]
[[!template text="50. We press p and Enter 50." start="00:12:43.600" video="mainVideo" id=subtitle]]
[[!template text="And here we are, we are at page 50." start="00:12:48.639" video="mainVideo" id=subtitle]]
[[!template text="You can look at the lower right to" start="00:12:53.279" video="mainVideo" id=subtitle]]
[[!template text="verify the page you're on." start="00:12:55.440" video="mainVideo" id=subtitle]]
[[!template text="You can use i to toggle dark mode" start="00:12:58.880" video="mainVideo" id=subtitle]]
[[!template text="as expected. Let's say you want to" start="00:13:05.120" video="mainVideo" id=subtitle]]
[[!template text="find" start="00:13:07.839" video="mainVideo" id=subtitle]]
[[!template text="table of contents, so use Control s —" start="00:13:08.240" video="mainVideo" id=subtitle]]
[[!template text="the Emacs default binding for I-search," start="00:13:11.519" video="mainVideo" id=subtitle]]
[[!template text="and search for a &quot;table of contents&quot;," start="00:13:15.680" video="mainVideo" id=subtitle]]
[[!template text="here we are, it is highlighted for you," start="00:13:19.360" video="mainVideo" id=subtitle]]
[[!template text="and you can Control s for more but" start="00:13:21.680" video="mainVideo" id=subtitle]]
[[!template text="there's only one match," start="00:13:23.120" video="mainVideo" id=subtitle]]
[[!template text="you (press) Control g (C-g) to" start="00:13:26.006" video="mainVideo" id=subtitle]]
[[!template text="disable the highlight," start="00:13:27.200" video="mainVideo" id=subtitle]]
[[!template text="and you see a lot of options for you to" start="00:13:28.800" video="mainVideo" id=subtitle]]
[[!template text="go." start="00:13:30.880" video="mainVideo" id=subtitle]]
[[!template text="Okay. Let's say, if you want to go to the" start="00:13:32.320" video="mainVideo" id=subtitle]]
[[!template text="preface." start="00:13:35.040" video="mainVideo" id=subtitle]]
[[!template text="That is, you press f which is" start="00:13:36.240" video="mainVideo" id=subtitle]]
[[!template text="also similar to" start="00:13:39.519" video="mainVideo" id=subtitle]]
[[!template text="EAF browser, you press f for Vimium," start="00:13:40.639" video="mainVideo" id=subtitle]]
[[!template text="and you see the marker, now change to wn," start="00:13:44.240" video="mainVideo" id=subtitle]]
[[!template text="press wn, and then you can go to the" start="00:13:47.760" video="mainVideo" id=subtitle]]
[[!template text="preface." start="00:13:50.160" video="mainVideo" id=subtitle]]
[[!template text="Now, we are at the preface." start="00:13:51.279" video="mainVideo" id=subtitle]]
[[!template text="So, now you finish reading, you want to" start="00:13:54.320" video="mainVideo" id=subtitle]]
[[!template text="save your progress?" start="00:13:56.480" video="mainVideo" id=subtitle]]
[[!template text="No worries, it is already saved for you" start="00:13:57.600" video="mainVideo" id=subtitle]]
[[!template text="by EAF. You can safely" start="00:13:59.440" video="mainVideo" id=subtitle]]
[[!template text="close the document using x," start="00:14:01.199" video="mainVideo" id=subtitle]]
[[!template text="and opening again, eaf-open," start="00:14:04.240" video="mainVideo" id=subtitle]]
[[!template text="and the file…, see you are at" start="00:14:07.519" video="mainVideo" id=subtitle]]
[[!template text="preface again. You're right at where" start="00:14:10.560" video="mainVideo" id=subtitle]]
[[!template text="you left of." start="00:14:14.000" video="mainVideo" id=subtitle]]
[[!template new="1" text="You can also use M-x org-store-link, or" start="00:14:16.560" video="mainVideo" id=subtitle]]
[[!template text="Control c l (C-c l) —" start="00:14:19.440" video="mainVideo" id=subtitle]]
[[!template text="which I prefer, if you want to save a" start="00:14:20.480" video="mainVideo" id=subtitle]]
[[!template text="particular page in" start="00:14:23.279" video="mainVideo" id=subtitle]]
[[!template text="a Org mode file. Now," start="00:14:24.480" video="mainVideo" id=subtitle]]
[[!template text="I go back to my presentation doc, I don't" start="00:14:28.240" video="mainVideo" id=subtitle]]
[[!template text="need this anymore." start="00:14:30.320" video="mainVideo" id=subtitle]]
[[!template text="So, you just (press) Control c Control l (C-c C-l)," start="00:14:31.760" video="mainVideo" id=subtitle]]
[[!template text="or I think M-x org-insert-link." start="00:14:35.600" video="mainVideo" id=subtitle]]
[[!template text="You can find the file right here, and" start="00:14:39.120" video="mainVideo" id=subtitle]]
[[!template text="you press Enter (RET)," start="00:14:41.040" video="mainVideo" id=subtitle]]
[[!template text="and you press Enter (RET) for the description" start="00:14:42.399" video="mainVideo" id=subtitle]]
[[!template text="again, and now it's right here," start="00:14:44.320" video="mainVideo" id=subtitle]]
[[!template text="and Control c Control o (C-c C-o) to open it. Voilà!" start="00:14:46.480" video="mainVideo" id=subtitle]]
[[!template text="You're back." start="00:14:50.720" video="mainVideo" id=subtitle]]
[[!template new="1" text="Let's now demonstrate the EAF Video" start="00:14:54.000" video="mainVideo" id=subtitle]]
[[!template text="Player." start="00:14:57.120" video="mainVideo" id=subtitle]]
[[!template text="So, M-x eaf-open, you use eaf-open whenever" start="00:14:58.880" video="mainVideo" id=subtitle]]
[[!template text="you want to" start="00:15:02.639" video="mainVideo" id=subtitle]]
[[!template text="open some file. You use eaf-open-browser" start="00:15:03.279" video="mainVideo" id=subtitle]]
[[!template text="if you want to use some" start="00:15:06.079" video="mainVideo" id=subtitle]]
[[!template text="actual application that's not really" start="00:15:07.279" video="mainVideo" id=subtitle]]
[[!template text="related to a file." start="00:15:09.920" video="mainVideo" id=subtitle]]
[[!template text="So, eaf-open, and select the video" start="00:15:11.199" video="mainVideo" id=subtitle]]
[[!template text="you want, so," start="00:15:14.800" video="mainVideo" id=subtitle]]
[[!template text="video-demo, I already have a video" start="00:15:15.600" video="mainVideo" id=subtitle]]
[[!template text="demo" start="00:15:18.320" video="mainVideo" id=subtitle]]
[[!template text="ready, because I recorded a video of" start="00:15:19.040" video="mainVideo" id=subtitle]]
[[!template text="the demo" start="00:15:21.839" video="mainVideo" id=subtitle]]
[[!template text="of the EAF Camera, have a look." start="00:15:22.720" video="mainVideo" id=subtitle]]
[[!template text="Let's move to the beginning, &quot;Hello people" start="00:15:26.000" video="mainVideo" id=subtitle]]
[[!template text="from the future!" start="00:15:28.079" video="mainVideo" id=subtitle]]
[[!template text="This is a demo of the EAF Video Player" start="00:15:29.279" video="mainVideo" id=subtitle]]
[[!template text="that demos the EAF Camera feature," start="00:15:32.399" video="mainVideo" id=subtitle]]
[[!template text="so, as you can see on the screen of me" start="00:15:35.199" video="mainVideo" id=subtitle]]
[[!template text="inside my camera," start="00:15:37.440" video="mainVideo" id=subtitle]]
[[!template text="and the screen is actually with all" start="00:15:38.639" video="mainVideo" id=subtitle]]
[[!template text="within Emacs." start="00:15:40.959" video="mainVideo" id=subtitle]]
[[!template text="(Right, the video itself is as well, haha.)" start="00:15:42.880" video="mainVideo" id=subtitle]]
[[!template text="You can open this" start="00:15:45.273" video="mainVideo" id=subtitle]]
[[!template text="using eaf-open-camera" start="00:15:46.079" video="mainVideo" id=subtitle]]
[[!template text="which I'm already into, and you can" start="00:15:49.839" video="mainVideo" id=subtitle]]
[[!template text="press" start="00:15:53.040" video="mainVideo" id=subtitle]]
[[!template text="p to capture a photo," start="00:15:53.600" video="mainVideo" id=subtitle]]
[[!template text="so, the photo is by default stored at" start="00:15:56.720" video="mainVideo" id=subtitle]]
[[!template text="your $HOME/Downloads directory," start="00:15:59.680" video="mainVideo" id=subtitle]]
[[!template text="and you can modify it" start="00:16:02.773" video="mainVideo" id=subtitle]]
[[!template text="freely. If you go here, and you can see" start="00:16:04.320" video="mainVideo" id=subtitle]]
[[!template text="the camera stored" start="00:16:07.839" video="mainVideo" id=subtitle]]
[[!template text="right here.&quot;" start="00:16:09.519" video="mainVideo" id=subtitle]]
[[!template text="So, you press Space (SPC) to pause, what I used" start="00:16:13.759" video="mainVideo" id=subtitle]]
[[!template text="here is" start="00:16:16.240" video="mainVideo" id=subtitle]]
[[!template text="the eaf-open-this-from-dired." start="00:16:17.120" video="mainVideo" id=subtitle]]
[[!template text="Basically, in dired" start="00:16:20.320" video="mainVideo" id=subtitle]]
[[!template text="you select" start="00:16:22.959" video="mainVideo" id=subtitle]]
[[!template text="the file that should be opened by" start="00:16:23.839" video="mainVideo" id=subtitle]]
[[!template text="EAF, and I used that. It detects that" start="00:16:26.959" video="mainVideo" id=subtitle]]
[[!template text="it wants to use the EAF Image Viewer, so" start="00:16:30.320" video="mainVideo" id=subtitle]]
[[!template text="I accidentally tested EAF Image Viewer" start="00:16:32.720" video="mainVideo" id=subtitle]]
[[!template text="before I noticed. That gives the" start="00:16:35.839" video="mainVideo" id=subtitle]]
[[!template text="image of the photo I just took" start="00:16:40.240" video="mainVideo" id=subtitle]]
[[!template text="using EAF Camera. As you can see, you" start="00:16:43.680" video="mainVideo" id=subtitle]]
[[!template text="can" start="00:16:47.040" video="mainVideo" id=subtitle]]
[[!template text="use hl — the Vim binding to navigate" start="00:16:47.360" video="mainVideo" id=subtitle]]
[[!template text="in the timestamp in the video," start="00:16:50.720" video="mainVideo" id=subtitle]]
[[!template text="and I can use" start="00:16:53.256" video="mainVideo" id=subtitle]]
[[!template text="jk to change the volumes of the video." start="00:16:55.920" video="mainVideo" id=subtitle]]
[[!template new="1" text="Alright. Now, you've seen all the basic" start="00:17:02.320" video="mainVideo" id=subtitle]]
[[!template text="usages" start="00:17:05.520" video="mainVideo" id=subtitle]]
[[!template text="of the EAF project, it comes the question" start="00:17:06.160" video="mainVideo" id=subtitle]]
[[!template text="of what is the magic behind it." start="00:17:08.720" video="mainVideo" id=subtitle]]
[[!template text="All right. Let's open the hacking page in" start="00:17:11.600" video="mainVideo" id=subtitle]]
[[!template text="the wiki," start="00:17:14.559" video="mainVideo" id=subtitle]]
[[!template text="the design is laid out in a diagram here." start="00:17:15.919" video="mainVideo" id=subtitle]]
[[!template text="Let's put it" start="00:17:20.400" video="mainVideo" id=subtitle]]
[[!template text="side by side along with my text, so" start="00:17:25.120" video="mainVideo" id=subtitle]]
[[!template text="we can follow through." start="00:17:27.839" video="mainVideo" id=subtitle]]
[[!template text="Right, okay. Let me…," start="00:17:32.320" video="mainVideo" id=subtitle]]
[[!template text="sorry, let me drink some water." start="00:17:36.080" video="mainVideo" id=subtitle]]
[[!template text="This page in the wiki went into a lot" start="00:17:42.320" video="mainVideo" id=subtitle]]
[[!template text="of detail," start="00:17:46.000" video="mainVideo" id=subtitle]]
[[!template text="due to the time constraint I will just" start="00:17:48.160" video="mainVideo" id=subtitle]]
[[!template text="rephrase some of the ideas here, so for" start="00:17:49.520" video="mainVideo" id=subtitle]]
[[!template text="anyone interested, please have a look at" start="00:17:51.679" video="mainVideo" id=subtitle]]
[[!template text="the wiki yourself." start="00:17:53.520" video="mainVideo" id=subtitle]]
[[!template text="The easiest way to think about EAF is" start="00:17:55.600" video="mainVideo" id=subtitle]]
[[!template text="that" start="00:17:58.160" video="mainVideo" id=subtitle]]
[[!template text="the actual GUI application is started in" start="00:17:58.720" video="mainVideo" id=subtitle]]
[[!template text="the background," start="00:18:01.679" video="mainVideo" id=subtitle]]
[[!template text="then the frame of the application is" start="00:18:02.960" video="mainVideo" id=subtitle]]
[[!template text="attached to the appropriate location on" start="00:18:04.960" video="mainVideo" id=subtitle]]
[[!template text="the" start="00:18:07.120" video="mainVideo" id=subtitle]]
[[!template text="Emacs window. So," start="00:18:07.679" video="mainVideo" id=subtitle]]
[[!template text="EAF linked Qt5 with Emacs using" start="00:18:10.720" video="mainVideo" id=subtitle]]
[[!template text="Elisp and Python." start="00:18:13.440" video="mainVideo" id=subtitle]]
[[!template text="On the Python side which is colored" start="00:18:14.960" video="mainVideo" id=subtitle]]
[[!template text="yellow in the image," start="00:18:17.120" video="mainVideo" id=subtitle]]
[[!template text="we have QGraphicsView and" start="00:18:18.640" video="mainVideo" id=subtitle]]
[[!template text="QGraphicsScene objects." start="00:18:20.439" video="mainVideo" id=subtitle]]
[[!template text="These are used to simulate the Emacs" start="00:18:22.960" video="mainVideo" id=subtitle]]
[[!template text="window buffer design" start="00:18:25.039" video="mainVideo" id=subtitle]]
[[!template text="where QGraphicsScene is similar to" start="00:18:26.640" video="mainVideo" id=subtitle]]
[[!template text="buffers in Emacs," start="00:18:28.640" video="mainVideo" id=subtitle]]
[[!template text="it controls the state and the content" start="00:18:29.840" video="mainVideo" id=subtitle]]
[[!template text="details of the application" start="00:18:31.840" video="mainVideo" id=subtitle]]
[[!template text="where QGraphicsView is similar to Emacs" start="00:18:34.240" video="mainVideo" id=subtitle]]
[[!template text="window. It populates the buffer" start="00:18:41.200" video="mainVideo" id=subtitle]]
[[!template text="(QGraphicsScene) to the foreground at" start="00:18:43.200" video="mainVideo" id=subtitle]]
[[!template text="the appropriate" start="00:18:45.919" video="mainVideo" id=subtitle]]
[[!template text="position." start="00:18:46.960" video="mainVideo" id=subtitle]]
[[!template text="Whenever an EAF mode buffer" start="00:18:48.573" video="mainVideo" id=subtitle]]
[[!template text="brings to a background…." start="00:18:50.320" video="mainVideo" id=subtitle]]
[[!template text="Whenever an EAF mode buffer brings to the" start="00:18:57.679" video="mainVideo" id=subtitle]]
[[!template text="foreground, sorry," start="00:18:59.679" video="mainVideo" id=subtitle]]
[[!template text="a QGraphicsView instance is" start="00:19:00.880" video="mainVideo" id=subtitle]]
[[!template text="created, and whenever the buffer goes to" start="00:19:02.559" video="mainVideo" id=subtitle]]
[[!template text="the background" start="00:19:05.120" video="mainVideo" id=subtitle]]
[[!template text="the QGraphicsView instance is then" start="00:19:06.080" video="mainVideo" id=subtitle]]
[[!template text="deleted," start="00:19:08.000" video="mainVideo" id=subtitle]]
[[!template text="while QGraphicsScene — the actual" start="00:19:09.120" video="mainVideo" id=subtitle]]
[[!template text="process — remains running in the" start="00:19:10.960" video="mainVideo" id=subtitle]]
[[!template text="background until the EAF mode buffer is" start="00:19:12.480" video="mainVideo" id=subtitle]]
[[!template text="killed." start="00:19:14.480" video="mainVideo" id=subtitle]]
[[!template text="GPU compositing is used to ensure that" start="00:19:16.000" video="mainVideo" id=subtitle]]
[[!template text="QGraphicsView and" start="00:19:18.320" video="mainVideo" id=subtitle]]
[[!template text="QGraphicsScene is synchronized real time." start="00:19:19.440" video="mainVideo" id=subtitle]]
[[!template text="Using QWindow::setParent function" start="00:19:21.840" video="mainVideo" id=subtitle]]
[[!template text="the QGraphicsView is attached to the" start="00:19:24.000" video="mainVideo" id=subtitle]]
[[!template text="appropriate location on the Emacs frame," start="00:19:25.679" video="mainVideo" id=subtitle]]
[[!template text="so that although GUI applications are" start="00:19:27.840" video="mainVideo" id=subtitle]]
[[!template text="not running within Emacs," start="00:19:30.640" video="mainVideo" id=subtitle]]
[[!template text="they look as if they were." start="00:19:32.400" video="mainVideo" id=subtitle]]
[[!template text="When user types on the keyboard it is" start="00:19:36.160" video="mainVideo" id=subtitle]]
[[!template text="first received by the Emacs" start="00:19:39.039" video="mainVideo" id=subtitle]]
[[!template text="EAF mode buffer, and then Elisp sends" start="00:19:41.039" video="mainVideo" id=subtitle]]
[[!template text="the event to QGraphicsScene using" start="00:19:43.520" video="mainVideo" id=subtitle]]
[[!template text="D-Bus." start="00:19:45.360" video="mainVideo" id=subtitle]]
[[!template text="When user clicks on the GUI application" start="00:19:46.240" video="mainVideo" id=subtitle]]
[[!template text="it is received by the QGraphicsView" start="00:19:48.720" video="mainVideo" id=subtitle]]
[[!template text="and processed in Python. Elisp can" start="00:19:50.799" video="mainVideo" id=subtitle]]
[[!template text="communicate with Python through D-Bus," start="00:19:53.280" video="mainVideo" id=subtitle]]
[[!template text="in other words you can" start="00:19:55.200" video="mainVideo" id=subtitle]]
[[!template text="customize and extend Emacs not just" start="00:19:59.200" video="mainVideo" id=subtitle]]
[[!template text="using" start="00:20:01.360" video="mainVideo" id=subtitle]]
[[!template text="Elisp, and now you can use Python, this way" start="00:20:01.760" video="mainVideo" id=subtitle]]
[[!template text="one can leverage" start="00:20:04.480" video="mainVideo" id=subtitle]]
[[!template text="all the Python properties like" start="00:20:05.360" video="mainVideo" id=subtitle]]
[[!template text="multi-threading or some other stuff," start="00:20:07.039" video="mainVideo" id=subtitle]]
[[!template text="the entire Python ecosystem can be" start="00:20:09.600" video="mainVideo" id=subtitle]]
[[!template text="utilized as well," start="00:20:11.679" video="mainVideo" id=subtitle]]
[[!template text="such as the Qt web engine that is the" start="00:20:13.520" video="mainVideo" id=subtitle]]
[[!template text="basis for" start="00:20:16.159" video="mainVideo" id=subtitle]]
[[!template text="our EAF Browser, and PyMuPDF is the" start="00:20:16.960" video="mainVideo" id=subtitle]]
[[!template text="basis for the EAF PDF Viewer." start="00:20:20.640" video="mainVideo" id=subtitle]]
[[!template text="This really opens the window to many" start="00:20:23.360" video="mainVideo" id=subtitle]]
[[!template text="many new possibilities to extend Emacs" start="00:20:25.840" video="mainVideo" id=subtitle]]
[[!template text="using EAF." start="00:20:28.240" video="mainVideo" id=subtitle]]
[[!template new="1" text="All right, back here. We are always" start="00:20:32.720" video="mainVideo" id=subtitle]]
[[!template text="looking for people to join the" start="00:20:36.080" video="mainVideo" id=subtitle]]
[[!template text="development, there are many many" start="00:20:37.760" video="mainVideo" id=subtitle]]
[[!template text="more work that needs to be done," start="00:20:39.679" video="mainVideo" id=subtitle]]
[[!template text="such as testing and debug EAF on" start="00:20:42.720" video="mainVideo" id=subtitle]]
[[!template text="more Linux distros and window managers" start="00:20:44.640" video="mainVideo" id=subtitle]]
[[!template text="such as i3" start="00:20:46.640" video="mainVideo" id=subtitle]]
[[!template text="and stuff, you can also add new EAF" start="00:20:47.760" video="mainVideo" id=subtitle]]
[[!template text="applications," start="00:20:51.200" video="mainVideo" id=subtitle]]
[[!template text="or debug and enhance existing EAF" start="00:20:52.080" video="mainVideo" id=subtitle]]
[[!template text="applications," start="00:20:54.240" video="mainVideo" id=subtitle]]
[[!template text="or you can port EAF to native Wayland" start="00:20:55.440" video="mainVideo" id=subtitle]]
[[!template text="which I just discussed with" start="00:20:58.000" video="mainVideo" id=subtitle]]
[[!template text="the emacs-webkit author" start="00:21:00.240" video="mainVideo" id=subtitle]]
[[!template text="Akira Kyle, and he told me that" start="00:21:03.840" video="mainVideo" id=subtitle]]
[[!template text="EAF doesn't really work on" start="00:21:07.919" video="mainVideo" id=subtitle]]
[[!template text="native Wayland, because it uses" start="00:21:11.200" video="mainVideo" id=subtitle]]
[[!template text="XWayland, so it doesn't work on the pgtk" start="00:21:14.320" video="mainVideo" id=subtitle]]
[[!template text="port of Emacs." start="00:21:16.799" video="mainVideo" id=subtitle]]
[[!template text="And we also need people to port EAF to" start="00:21:18.159" video="mainVideo" id=subtitle]]
[[!template text="non-free operating systems" start="00:21:20.559" video="mainVideo" id=subtitle]]
[[!template text="including Windows and macOS," start="00:21:22.080" video="mainVideo" id=subtitle]]
[[!template text="and that's because, like, D-Bus is a Linux" start="00:21:25.600" video="mainVideo" id=subtitle]]
[[!template text="specific feature, so it doesn't really" start="00:21:28.480" video="mainVideo" id=subtitle]]
[[!template text="work on other platform." start="00:21:30.080" video="mainVideo" id=subtitle]]
[[!template text="We need to check, replace it with some" start="00:21:31.360" video="mainVideo" id=subtitle]]
[[!template text="alternative, and" start="00:21:33.039" video="mainVideo" id=subtitle]]
[[!template text="QGraphicsScene somehow doesn't really" start="00:21:34.640" video="mainVideo" id=subtitle]]
[[!template text="work on macOS," start="00:21:36.720" video="mainVideo" id=subtitle]]
[[!template text="and there are many other to-do lists" start="00:21:38.640" video="mainVideo" id=subtitle]]
[[!template text="available, so please have a look" start="00:21:40.320" video="mainVideo" id=subtitle]]
[[!template text="and see if there is anything you want to" start="00:21:42.880" video="mainVideo" id=subtitle]]
[[!template text="work on." start="00:21:45.039" video="mainVideo" id=subtitle]]
[[!template text="All right. So, since this is a" start="00:21:46.640" video="mainVideo" id=subtitle]]
[[!template text="pre-recorded talk I won't be able to do" start="00:21:49.039" video="mainVideo" id=subtitle]]
[[!template text="the Q & A real time in the video." start="00:21:51.120" video="mainVideo" id=subtitle]]
[[!template text="However, I will be around on the" start="00:21:53.520" video="mainVideo" id=subtitle]]
[[!template text="collaborative pad" start="00:21:56.080" video="mainVideo" id=subtitle]]
[[!template text="and the IRC #emacsconf," start="00:21:57.200" video="mainVideo" id=subtitle]]
[[!template text="#emacsconf-questions" start="00:22:00.239" video="mainVideo" id=subtitle]]
[[!template text="to answer any questions when it pops up," start="00:22:01.360" video="mainVideo" id=subtitle]]
[[!template text="and you can also submit an issue" start="00:22:04.139" video="mainVideo" id=subtitle]]
[[!template text="on the repo, and you can check the wiki" start="00:22:05.760" video="mainVideo" id=subtitle]]
[[!template text="for some other guides and tricks." start="00:22:09.120" video="mainVideo" id=subtitle]]
[[!template text="All right. Thank you guys, and hopefully" start="00:22:12.640" video="mainVideo" id=subtitle]]
[[!template text="you find" start="00:22:15.039" video="mainVideo" id=subtitle]]
[[!template text="this EAF project very interesting, and" start="00:22:16.000" video="mainVideo" id=subtitle]]
[[!template text="enjoy the rest of EmacsConf 2020." start="00:22:18.320" video="mainVideo" id=subtitle]]