From 6dabfe18c294131bbdf7956c189347d4947d39e2 Mon Sep 17 00:00:00 2001 From: Bhavin Gandhi Date: Wed, 17 Feb 2021 22:40:45 +0530 Subject: Add subtitles and transcript for 34 --- 2020/info/34.md | 568 ++++++- ...applications-with-eaf--matthew-zeng-autogen.vtt | 1714 -------------------- ...ern-gui-applications-with-eaf--matthew-zeng.vtt | 1678 +++++++++++++++++++ 3 files changed, 2244 insertions(+), 1716 deletions(-) delete mode 100644 2020/subtitles/emacsconf-2020--34-extend-emacs-to-modern-gui-applications-with-eaf--matthew-zeng-autogen.vtt create mode 100644 2020/subtitles/emacsconf-2020--34-extend-emacs-to-modern-gui-applications-with-eaf--matthew-zeng.vtt diff --git a/2020/info/34.md b/2020/info/34.md index c8aaee9e..cfca7972 100644 --- a/2020/info/34.md +++ b/2020/info/34.md @@ -1,8 +1,9 @@ # 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"]] -[Download compressed .webm video (28.4M)](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) +[[!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 (28.4M)](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 @@ -102,3 +103,566 @@ Not yet! Will have a look into it later :-) - One of the admins of the [Emacs China forum](https://emacs-china.org/). - + + +# 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 "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"." 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 "Introduction to Programming in" start="00:12:06.079" video="mainVideo" id=subtitle]] +[[!template text="Emacs Lisp"." 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." start="00:12:43.600" video="mainVideo" id=subtitle]] +[[!template text="We press p and Enter 50." start="00:12:44.079" 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 "table of contents"," 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, "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."" 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]] diff --git a/2020/subtitles/emacsconf-2020--34-extend-emacs-to-modern-gui-applications-with-eaf--matthew-zeng-autogen.vtt b/2020/subtitles/emacsconf-2020--34-extend-emacs-to-modern-gui-applications-with-eaf--matthew-zeng-autogen.vtt deleted file mode 100644 index d9a406f9..00000000 --- a/2020/subtitles/emacsconf-2020--34-extend-emacs-to-modern-gui-applications-with-eaf--matthew-zeng-autogen.vtt +++ /dev/null @@ -1,1714 +0,0 @@ -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 Emacs con 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 imax - -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 zing you can - -00:00:46.559 --> 00:00:47.840 -also call me mt - -00:00:47.840 --> 00:00:50.640 -or mindu 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 urudu - -00:00:57.760 --> 00:01:00.480 -online I mean 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 listen 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:17.280 -to my projects I'm involving one's me - -00:01:17.280 --> 00:01:18.240 -max 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 image 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 imax application filter - -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 other - -00:01:30.400 --> 00:01:33.040 -lazy cat 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 might 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 oh 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 -or within Emacs it's all thanks to the - -00:01:49.200 --> 00:01:51.840 -ef 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 render to read some - -00:02:41.440 --> 00:02:42.640 -documents - -00:02:42.640 --> 00:02:45.200 -so far ems 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 the author manatee lazy cat - -00:02:55.840 --> 00:02:58.640 -or lazy cat 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 e-max - -00:03:03.120 --> 00:03:04.159 -experience - -00:03:04.159 --> 00:03:07.280 -he wanted to truly live in e-max - -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 lazy car without 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 e-max 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 ux doubling 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 emax 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 ef browser so - -00:04:00.720 --> 00:04:03.760 -if you mx ef open - -00:04:03.760 --> 00:04:07.200 -browser with history 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 -into or search for some keyword and 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 - -00:04:29.280 --> 00:04:31.120 -so this car decided to develop a - -00:04:31.120 --> 00:04:33.680 -solution of its 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:40.840 -development last year - -00:04:40.840 --> 00:04:44.000 -2019 ef is - -00:04:44.000 --> 00:04:47.880 -a highly customizable and extensible - -00:04:47.880 --> 00:04:49.759 -reapplication framework that extends - -00:04:49.759 --> 00:04:52.160 -imax to graphical capabilities using pi - -00:04:52.160 --> 00:04:57.840 -qd5 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 ef - -00:05:05.600 --> 00:05:06.720 -applications - -00:05:06.720 --> 00:05:09.520 -a browser a markdown premier a video - -00:05:09.520 --> 00:05:10.960 -player - -00:05:10.960 --> 00:05:14.240 -a pdf viewer and more 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 ef 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 control p - -00:05:29.600 --> 00:05:32.000 -you can also use the vim style xjkl 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 or g to the - -00:05:36.320 --> 00:05:37.280 -beginning of page - -00:05:37.280 --> 00:05:39.120 -when that shift period or capital g to - -00:05:39.120 --> 00:05:41.199 -the end of page - -00:05:41.199 --> 00:05:44.320 -limiting and surfing keys linear and - -00:05:44.320 --> 00:05:46.479 -surfing keys 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 ef 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 you enter and now - -00:06:08.479 --> 00:06:10.240 -you will navigate it 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 - -00:06:17.680 --> 00:06:20.560 -control hm just as any other max 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 ef application as well - -00:06:30.960 --> 00:06:34.319 -so you can find it under the week or or - -00:06:34.319 --> 00:06:36.720 -you can find it under the wiki in the - -00:06:36.720 --> 00:06:37.600 -key binding - -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 now you're in the key - -00:06:44.240 --> 00:06:45.600 -binding web page - -00:06:45.600 --> 00:06:47.520 -you can see all of the key buttons - -00:06:47.520 --> 00:06:49.280 -available in every - -00:06:49.280 --> 00:06:53.919 -es 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.360 -using ef - -00:06:57.360 --> 00:07:00.240 -bank key you can customize control n as - -00:07:00.240 --> 00:07:02.960 -in the web page to - -00:07:02.960 --> 00:07:05.759 -to scroll up in the ef pdf viewer or you - -00:07:05.759 --> 00:07:06.639 -can unbind - -00:07:06.639 --> 00:07:09.599 -an existing binding using using yet bank - -00:07:09.599 --> 00:07:10.000 -key - -00:07:10.000 --> 00:07:14.840 -binder to new 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 ef 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 -so 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 package press f - -00:07:32.960 --> 00:07:34.080 -press a d - -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 doc - -00:07:44.479 --> 00:07:46.720 -mode for ef 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 correct 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 -pop um again but they're not 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 or 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 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:23.280 -and use meta w to - -00:08:23.280 --> 00:08:25.680 -excuse me metadata to copy the taste the - -00:08:25.680 --> 00:08:26.479 -text - -00:08:26.479 --> 00:08:29.199 -now we made a shift column 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 -voila we have the dark mode enabled - -00:08:42.159 --> 00:08:44.880 -so there are well let's take a toggle - -00:08:44.880 --> 00:08:46.160 -back off for now - -00:08:46.160 --> 00:08:49.360 -now we made our shift column again - -00:08:49.360 --> 00:08:51.600 -and we find the 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 you can have you can - -00:09:11.680 --> 00:09:14.399 -you can make the ef browser to 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 -and you can make yes the default browser - -00:09:22.800 --> 00:09:23.839 -Emacs by - -00:09:23.839 --> 00:09:26.720 -aliasing aliasing browse web to your - -00:09:26.720 --> 00:09:27.680 -open browser - -00:09:27.680 --> 00:09:30.399 -or or set the browse url browser - -00:09:30.399 --> 00:09:31.200 -function to - -00:09:31.200 --> 00:09:33.519 -open browser there's just some tricks - -00:09:33.519 --> 00:09:34.480 -and there are also - -00:09:34.480 --> 00:09:37.920 -uh an experimental app blocker currently - -00:09:37.920 --> 00:09:41.680 -take in place and so 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 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 so the ef 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:09:59.920 -be downloaded using - -00:09:59.920 --> 00:10:04.000 -a area too and - -00:10:04.000 --> 00:10:06.079 -you can also customize the ef browser - -00:10:06.079 --> 00:10:07.200 -download path - -00:10:07.200 --> 00:10:11.120 -using ef set so it's a function that we - -00:10:11.120 --> 00:10:14.399 -defined similar to set the normal set we - -00:10:14.399 --> 00:10:15.040 -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:28.959 -when I press when I use mx you have open - -00:10:28.959 --> 00:10:30.480 -browser's 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:36.560 -easily with ef - -00:10:36.560 --> 00:10:38.720 -set queue and set that remember history - -00:10:38.720 --> 00:10:40.640 -to false - -00:10:40.640 --> 00:10:42.399 -you can also say your default search - -00:10:42.399 --> 00:10:43.839 -engine so - -00:10:43.839 --> 00:10:47.200 -so right now we have google although - -00:10:47.200 --> 00:10:50.480 -not not really good but google and also - -00:10:50.480 --> 00:10:53.600 -go which is a better search engine - -00:10:53.600 --> 00:10:57.360 -well uh 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 so the default zoom of your - -00:11:05.040 --> 00:11:07.600 -browser is 1.0 so you can convert - -00:11:07.600 --> 00:11:10.000 -convert 3000 to 1.25 so you can so when - -00:11:10.000 --> 00:11:11.920 -you open any web page about it will be - -00:11:11.920 --> 00:11:14.079 -zoomed - -00:11:14.079 --> 00:11:17.360 -by default uh 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 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 also some - -00:11:37.920 --> 00:11:41.519 -customization on ef camera - -00:11:41.519 --> 00:11:47.760 -you can do as well yeah - -00:11:47.760 --> 00:11:52.399 -so uh let's move on to efpd viewer - -00:11:52.399 --> 00:11:56.079 -so now now let's open - -00:11:56.079 --> 00:11:59.440 -the pdf file using af - -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 yes open and - -00:12:06.079 --> 00:12:08.160 -select introduction to programming in - -00:12:08.160 --> 00:12:11.440 -e-max list - -00:12:11.440 --> 00:12:13.760 -uh 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 story yes - -00:12:22.800 --> 00:12:23.200 -and - -00:12:23.200 --> 00:12:27.040 -there are 273 pages in total but notice - -00:12:27.040 --> 00:12:29.279 -like 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 list - -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:44.079 -50 - -00:12:44.079 --> 00:12:48.639 -we press p and enter 50. - -00:12:48.639 --> 00:12:53.279 -50 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:02.079 -and you can you can - -00:13:02.079 --> 00:13:05.120 -use I to toggle dark mode - -00:13:05.120 --> 00:13:07.839 -as expected and 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 ctrl s - -00:13:11.519 --> 00:13:15.680 -the image 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:24.240 -there's only one or - -00:13:24.240 --> 00:13:27.200 -one match one other one you ctrl 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 -so that is you press f which which is - -00:13:39.519 --> 00:13:40.639 -also similar to - -00:13:40.639 --> 00:13:44.240 -eef browser you press f for vimeo - -00:13:44.240 --> 00:13:47.760 -and you see the marker now change to w - -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 -prefix - -00:13:51.279 --> 00:13:54.320 -now we'll add a prefix - -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 ef 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 af - -00:14:07.519 --> 00:14:10.560 -open and the file see your I - -00:14:10.560 --> 00:14:14.000 -preface again so you're right at where - -00:14:14.000 --> 00:14:16.560 -you let up left up - -00:14:16.560 --> 00:14:19.440 -you can also use mx org store link or - -00:14:19.440 --> 00:14:20.480 -ctrl cl - -00:14:20.480 --> 00:14:23.279 -which I prefer to 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 orgmo file so now - -00:14:28.240 --> 00:14:30.320 -I go back to my presentation now I don't - -00:14:30.320 --> 00:14:31.760 -need this anymore - -00:14:31.760 --> 00:14:35.600 -uh so you just control c control l - -00:14:35.600 --> 00:14:39.120 -or I think mx or insert link - -00:14:39.120 --> 00:14:41.040 -so you can find the file right here and - -00:14:41.040 --> 00:14:42.399 -you press enter - -00:14:42.399 --> 00:14:44.320 -and you press enter 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 ctrl c ctrl o to open it voila - -00:14:50.720 --> 00:14:54.000 -you're back right so - -00:14:54.000 --> 00:14:57.120 -let's now demonstrate the ef video - -00:14:57.120 --> 00:14:58.880 -player - -00:14:58.880 --> 00:15:02.639 -so mxef open if you use ef 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 yet 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 you have 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 so I already have a video - -00:15:18.320 --> 00:15:19.040 -demo - -00:15:19.040 --> 00:15:21.839 -ready so 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 ef camera have a look so - -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 ef video player - -00:15:32.399 --> 00:15:35.199 -that demos the ef 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:46.079 -right so and you can open this - -00:15:46.079 --> 00:15:49.839 -using here open camera - -00:15:49.839 --> 00:15:53.040 -and 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:00.880 -your home slash - -00:16:00.880 --> 00:16:03.920 -downloads directory and you can modify - -00:16:03.920 --> 00:16:04.320 -it - -00:16:04.320 --> 00:16:07.839 -freely so 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 so why what I used here - -00:16:13.759 --> 00:16:16.240 -so you press space to pause what I used - -00:16:16.240 --> 00:16:17.120 -here is - -00:16:17.120 --> 00:16:20.320 -the year so ef open this entire so - -00:16:20.320 --> 00:16:22.959 -basically so in direct you you go to you - -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 use that so it it detects that - -00:16:30.320 --> 00:16:32.720 -it wants to use the ef image viewer so - -00:16:32.720 --> 00:16:35.839 -I accidentally tested if image viewer - -00:16:35.839 --> 00:16:39.759 -before I noticed so that that that gives - -00:16:39.759 --> 00:16:40.240 -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 ef camera and as you can see you - -00:16:47.040 --> 00:16:47.360 -can - -00:16:47.360 --> 00:16:50.720 -I can use hl the bim button to navigate - -00:16:50.720 --> 00:16:51.600 -in the time - -00:16:51.600 --> 00:16:55.920 -timestamp in the video and I can use - -00:16:55.920 --> 00:17:02.320 -jk to to change the volumes of the video - -00:17:02.320 --> 00:17:05.520 -alright so 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 ef 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 -so and let's put it - -00:17:25.120 --> 00:17:27.839 -side by side along with my text so you - -00:17:27.839 --> 00:17:28.160 -can - -00:17:28.160 --> 00:17:32.320 -go 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 -so 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 -you have linked qt5 with Emacs using - -00:18:13.440 --> 00:18:14.960 -list and python - -00:18:14.960 --> 00:18:17.120 -of the python site which is colored - -00:18:17.120 --> 00:18:18.640 -yellow in the image - -00:18:18.640 --> 00:18:20.559 -you have two graphics view and queue - -00:18:20.559 --> 00:18:22.960 -graphics scene objects - -00:18:22.960 --> 00:18:25.039 -these are used to simulate the e-max - -00:18:25.039 --> 00:18:26.640 -window buffer design - -00:18:26.640 --> 00:18:28.640 -where q graphics scene 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:39.039 -well q graphics view is similar to - -00:18:39.039 --> 00:18:41.200 -geographic view is similar to imax - -00:18:41.200 --> 00:18:43.200 -window it populates the buffer - -00:18:43.200 --> 00:18:45.919 -to graphics scene to the full program at - -00:18:45.919 --> 00:18:46.960 -the appropriate - -00:18:46.960 --> 00:18:50.320 -position whenever an ef mode buffer - -00:18:50.320 --> 00:18:57.679 -brings to a background - -00:18:57.679 --> 00:18:59.679 -whenever an ef mode buffer brings to the - -00:18:59.679 --> 00:19:00.880 -foreground sorry - -00:19:00.880 --> 00:19:02.559 -a queue graphics view 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 q graphics view instance is then - -00:19:08.000 --> 00:19:09.120 -deleted - -00:19:09.120 --> 00:19:10.960 -while q graphics scene 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 ef mode buffer is - -00:19:14.480 --> 00:19:16.000 -killed - -00:19:16.000 --> 00:19:18.320 -gpa compositing is used to ensure that q - -00:19:18.320 --> 00:19:19.440 -graphics view and - -00:19:19.440 --> 00:19:21.840 -graphics sync is synchronized real time - -00:19:21.840 --> 00:19:24.000 -using q windows set parent function - -00:19:24.000 --> 00:19:25.679 -the queue graphics view is attached to - -00:19:25.679 --> 00:19:27.840 -appropriate location on the e-max frame - -00:19:27.840 --> 00:19:30.640 -so that although great applications are - -00:19:30.640 --> 00:19:32.400 -not running within e-max - -00:19:32.400 --> 00:19:36.160 -they look as if they were - -00:19:36.160 --> 00:19:39.039 -so when user types on the keyboard it is - -00:19:39.039 --> 00:19:41.039 -first received by the Emacs ef - -00:19:41.039 --> 00:19:43.520 -ef mode buffer and then it lifts sends - -00:19:43.520 --> 00:19:45.360 -the event to google graphics sync using - -00:19:45.360 --> 00:19:46.240 -dbus - -00:19:46.240 --> 00:19:48.720 -when user clicks on the gui application - -00:19:48.720 --> 00:19:50.400 -it is received by the queue graphics - -00:19:50.400 --> 00:19:50.799 -view - -00:19:50.799 --> 00:19:53.280 -and process in python ellipse can - -00:19:53.280 --> 00:19:55.200 -communicate with python through dbus - -00:19:55.200 --> 00:19:59.200 -in other words 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 -lisp 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 eef browser and pi mu pdf is the - -00:20:20.640 --> 00:20:23.360 -basis for the ef pdf viewer - -00:20:23.360 --> 00:20:25.840 -so 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 like - -00:20:42.720 --> 00:20:44.640 -such as testing and debug if there are - -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 I mean you can also add new ef - -00:20:51.200 --> 00:20:52.080 -applications - -00:20:52.080 --> 00:20:54.240 -or debug and enhance existing af - -00:20:54.240 --> 00:20:55.440 -applications - -00:20:55.440 --> 00:20:58.000 -or you can port ef to native wayland - -00:20:58.000 --> 00:21:00.240 -which I just discussed with the - -00:21:00.240 --> 00:21:03.840 -the ems whip kit author uh a kill - -00:21:03.840 --> 00:21:07.919 -akira tile and she he told me that like - -00:21:07.919 --> 00:21:10.159 -really like it must really yeah it - -00:21:10.159 --> 00:21:11.200 -doesn't really work - -00:21:11.200 --> 00:21:14.320 -um native villain because it uses - -00:21:14.320 --> 00:21:16.799 -x valence so it doesn't work on the pgdk - -00:21:16.799 --> 00:21:18.159 -port of Emacs - -00:21:18.159 --> 00:21:20.559 -so and we also need people to pour ef to - -00:21:20.559 --> 00:21:22.080 -non-free operating systems - -00:21:22.080 --> 00:21:25.600 -including windows and mac os - -00:21:25.600 --> 00:21:28.480 -and that's because like debug 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 change replace it with some - -00:21:33.039 --> 00:21:34.640 -alternative and - -00:21:34.640 --> 00:21:36.720 -geographic scene somehow doesn't really - -00:21:36.720 --> 00:21:38.640 -work on mac os - -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 -if and see it's 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 -collaborate pad - -00:21:57.200 --> 00:22:00.559 -and the irc imax con you must come - -00:22:00.559 --> 00:22:01.360 -questions - -00:22:01.360 --> 00:22:04.240 -to answer any questions it pops up and - -00:22:04.240 --> 00:22:05.760 -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 the - -00:22:16.000 --> 00:22:18.320 -this year project very interesting and - -00:22:18.320 --> 00:22:24.320 -enjoy the rest of Emacs com 2020 diff --git a/2020/subtitles/emacsconf-2020--34-extend-emacs-to-modern-gui-applications-with-eaf--matthew-zeng.vtt b/2020/subtitles/emacsconf-2020--34-extend-emacs-to-modern-gui-applications-with-eaf--matthew-zeng.vtt new file mode 100644 index 00000000..ca4ae9ea --- /dev/null +++ b/2020/subtitles/emacsconf-2020--34-extend-emacs-to-modern-gui-applications-with-eaf--matthew-zeng.vtt @@ -0,0 +1,1678 @@ +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:44.079 +50. + +00:12:44.079 --> 00:12:48.639 +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. -- cgit v1.2.3