WEBVTT 00:02.960 --> 00:00:10.240 Greetings. Salaam. This is Mohsen Banan. 00:00:10.240 --> 00:00:14.080 I am an Iranian software and internet engineer. 00:14.080 --> 00:17.199 I converted to Emacs in 1986. 00:17.199 --> 00:20.480 It was Emacs version 17 then. 00:20.480 --> 00:00:23.920 By around 1988, when Emacs version 18 00:00:23.920 --> 00:00:25.680 was well in place, 00:00:25.680 --> 00:00:28.960 I started living inside of Emacs. 00:00:28.960 --> 00:00:31.119 My primary digital environment 00:00:31.119 --> 00:00:33.680 has been Emacs ever since. 00:33.680 --> 00:36.559 It has been a good life. 00:36.559 --> 00:40.000 I'm a native Farsi speaker and writer. 00:40.000 --> 00:00:41.520 I'm not a linguist, 00:00:41.520 --> 00:00:43.800 and I do not specialize in 00:43.800 --> 00:46.719 multilingualization, internationalization, 00:46.719 --> 00:48.879 and localization. 00:48.879 --> 00:52.239 My favorite programming language is Lisp, 00:52.239 --> 00:00:58.319 and I am a bit of an Emacs developer. 00:58.320 --> 01:00.719 This presentation is about use of 01:00.719 --> 01:04.000 Perso-Arabic Scripts with Emacs. 01:04.000 --> 01:06.720 It's an overview presentation. 01:06.720 --> 00:01:08.320 I won't be digging deep 00:01:08.320 --> 00:01:11.360 in many of the mentioned topics. 01:11.360 --> 00:01:13.119 My goal is to make you aware 00:01:13.119 --> 00:01:16.159 of what can be done with Emacs today, 01:16.159 --> 01:19.280 and the potentials that Emacs presents 01:19.280 --> 01:22.640 for Perso-Arabic writers. 01:22.640 --> 01:25.759 The main topics that i'll cover are: 01:25.759 --> 00:01:30.320 - a brief introduction to Perso-Arabic scripts 01:30.320 --> 01:35.119 - two existing Emacs Persian input methods 01:35.119 --> 00:01:36.960 - the challenges involved with 00:01:36.960 --> 00:01:42.960 making Emacs applications bidirectional-aware 01:42.960 --> 00:01:45.280 - the ultimate goal of creating 00:01:45.280 --> 00:01:47.759 a complete digital environment 00:01:47.759 --> 00:01:51.200 for Perso-Arabic writers 01:51.200 --> 00:01:57.679 I'll also be including various pointers. 01:57.680 --> 00:02:00.320 So first, let's make sure 00:02:00.320 --> 00:02:02.079 that what I'm presenting 00:02:02.079 --> 00:02:04.560 is of interest to you. 02:04.560 --> 00:02:07.040 if you are a Perso-Arabic writer 00:02:07.040 --> 00:02:08.879 and if you use Emacs, 00:02:08.879 --> 00:02:12.720 you're definitely my intended audience. 02:12.720 --> 00:02:15.120 If you're an Emacs developer 00:02:15.120 --> 00:02:19.120 who wishes to make her Emacs apps 02:19.120 --> 00:02:22.000 multilingual and bidi-aware, 00:02:22.000 --> 00:02:27.359 you're also my intended audience. 02:27.360 --> 00:02:30.480 For the purposes of this presentation, 00:02:30.480 --> 00:02:34.160 in this slide, I'm categorizing scripts 02:34.160 --> 02:39.040 based on directionality and shaping. 02:39.040 --> 00:02:41.280 Latin letters are not shaped. 00:02:41.280 --> 00:02:43.120 Generally speaking, 00:02:43.120 --> 00:02:44.800 the shape of a Latin letter 00:02:44.800 --> 00:02:49.599 is independent of its position in a word. 02:49.599 --> 00:02:53.280 Perso-Arabic letters are subject to shaping. 02:53.280 --> 02:56.319 For example the letter mim-- 02:56.319 --> 02:58.800 sounding similar to M-- 02:58.800 --> 03:01.840 takes three shapes depending on whether 03:01.840 --> 03:04.720 it is in the beginning of a word, 03:04.720 --> 00:03:06.480 in the middle of a word, 00:03:06.480 --> 00:03:09.200 or at the end of a word. 03:09.200 --> 00:03:12.159 I'll be showing more of how shaping works 00:03:12.159 --> 00:03:16.400 in an Emacs session screencast later. 03:16.400 --> 00:03:18.159 Shaping has ramifications 00:03:18.159 --> 00:03:21.040 for Emacs application developers. 03:21.040 --> 00:03:23.760 For example, if you are combining 00:03:23.760 --> 00:03:26.720 initial letters to create a label, 03:26.720 --> 03:29.680 those letters can be shaped together-- 03:29.680 --> 03:31.760 which is not what you want. 03:31.760 --> 03:34.000 In such cases, you would need to 03:34.000 --> 03:37.840 explicitly keep them separate. 03:37.840 --> 00:03:40.799 Latin-based scripts are always 00:03:40.799 --> 00:03:42.560 left-to-right. 03:42.560 --> 00:03:46.560 Perso-Arabic scripts are right-to-left 03:46.560 --> 00:03:51.040 with letters, but numbers are left-to-right. 03:51.040 --> 00:03:53.040 So, Perso-Arabic scripts 00:03:53.040 --> 00:03:56.319 are bi-directional (BIDI). 03:56.319 --> 00:03:58.879 Hebrew is also bi-directional, 00:03:58.879 --> 00:04:02.159 but Hebrew is not shaped. 04:02.159 --> 00:04:05.680 More recently, it has become very common 00:04:05.680 --> 00:04:10.400 to mix Perso-Arabic and Latin text. 04:10.400 --> 00:04:12.560 This can become very confusing 00:04:12.560 --> 00:04:14.959 if paragraph directionality 00:04:14.959 --> 00:04:17.759 is not properly observed. 04:17.759 --> 00:04:20.000 I'll be providing some examples 00:04:20.000 --> 00:04:23.120 as screencasts. 04:23.120 --> 00:04:24.880 The Emacs display engine 00:04:24.880 --> 00:04:27.280 now fully and well supports 00:04:27.280 --> 00:04:32.079 both shaping and BIDI. 04:32.080 --> 00:04:37.120 Since 2012, starting with Emacs version 24, 04:37.120 --> 00:04:38.639 we can say that Emacs 00:04:38.639 --> 00:04:43.600 is a truly multilingual-capable environment. 04:43.600 --> 00:04:45.040 Like everything else, 00:04:45.040 --> 00:04:46.880 multilingual support for Emacs 00:04:46.880 --> 00:04:49.280 was added gradually. 04:49.280 --> 04:52.560 Unicode support was added early on. 04:52.560 --> 04:55.520 The framework for input methods evolved 04:55.520 --> 00:05:00.320 in the 1990s. But it was not till version 24 00:05:00.320 --> 00:05:03.360 in 2012 that the display engine 00:05:03.360 --> 00:05:06.240 could fully support BIDI. 05:06.240 --> 00:05:08.800 Hats off to Eli Zaretskii 00:05:08.800 --> 00:05:12.960 for his work on Emacs BIDI. 05:12.960 --> 00:05:15.600 Once full BIDI support was in place 00:05:15.600 --> 00:05:19.199 in 2012, I went ahead and added 00:05:19.199 --> 00:05:24.000 two Persian input methods to Emacs 24. 05:24.000 --> 00:05:26.400 So now Emacs fully supports 00:05:26.400 --> 00:05:30.638 Perso-Arabic scripts. 05:30.639 --> 00:05:34.080 By Perso-Arabic script, we're referring to 00:05:34.080 --> 00:05:36.320 the Arabic writing system 05:36.320 --> 00:05:38.160 with various extensions 00:05:38.160 --> 00:05:42.240 used by a large number of languages. 05:42.240 --> 00:05:44.479 Perso-Arabic is the second most 00:05:44.479 --> 00:05:47.520 widely used writing system in the world 05:47.520 --> 05:50.479 by the number of countries. 05:50.479 --> 05:54.000 It is the third by the number of users 05:54.000 --> 05:59.039 after the Latin and Chinese scripts. 05:59.039 --> 06:02.160 So, by well supporting Perso-Arabic, 06:02.160 --> 00:06:04.720 Emacs's potential user base 00:06:04.720 --> 00:06:09.918 can be greatly enhanced. 06:09.919 --> 00:06:12.960 Before focusing on the Persian input methods, 00:06:12.960 --> 00:06:14.960 let me quickly summarize 00:06:14.960 --> 00:06:18.319 Emacs's input methods model. 06:18.319 --> 00:06:21.360 Input methods allow you to enter characters 00:06:21.360 --> 00:06:25.120 that are not supported by your keyboard. 06:25.120 --> 00:06:29.280 With Quail maps, we can map ASCII key strings 00:06:29.280 --> 00:06:31.919 to multilingual characters. 06:31.919 --> 00:06:34.080 So we can input any text 00:06:34.080 --> 00:06:36.960 from an ASCII keyboard. 06:36.960 --> 00:06:38.960 You select an input method 00:06:38.960 --> 00:06:44.400 with C-x RET C-\ . 06:44.400 --> 00:06:49.918 We'll try that in a screencast shortly. 06:49.919 --> 00:06:53.919 Since version 24, Emacs comes loaded with 00:06:53.919 --> 00:06:56.880 two Persian input methods: 06:56.880 --> 00:07:01.520 farsi-isiri-9147 is the standard 00:07:01.520 --> 00:07:04.960 traditional Iranian keyboard. 07:04.960 --> 00:07:09.199 farsi-transliterate-banan is an intuitive 00:07:09.199 --> 00:07:12.319 transliteration keyboard for Farsi 00:07:12.319 --> 00:07:16.960 which requires near-zero training for use. 07:16.960 --> 00:07:18.960 I'll be mostly focused on 00:07:18.960 --> 00:07:21.520 farsi-transliterate-banan 00:07:21.520 --> 00:07:23.919 in this presentation. 07:23.919 --> 00:07:27.839 So let's try this out. 07:27.840 --> 07:30.319 In this gif-cast, we're going to select 07:30.319 --> 00:07:32.240 a Persian input method 00:07:32.240 --> 00:07:35.280 and write a few simple sentences. 07:35.280 --> 07:38.160 With no training and no documentation, 07:38.160 --> 00:07:41.360 any Farsi writer familiar with Emacs 00:07:41.360 --> 00:07:45.440 can write these, as farsi-transliterate-banan 00:07:45.440 --> 00:07:48.560 input method is intuitive. 07:48.560 --> 00:07:50.400 I'll be using keycast 00:07:50.400 --> 00:07:54.160 to show you keys as they are used. 07:54.160 --> 07:56.560 Let me first describe as to what we have 07:56.560 --> 07:58.720 on the screen. 07:58.720 --> 08:01.520 There are three windows in one frame. 08:01.520 --> 00:08:04.639 Keycast will show commands and keys 00:08:04.639 --> 00:08:06.319 on the mode line. 08:06.319 --> 00:08:08.639 The leftmost window is showing 00:08:08.639 --> 00:08:10.879 logs of keycast. 08:10.879 --> 08:14.639 Transformed individual unshaped letters 08:14.639 --> 08:17.360 will appear here. 08:17.360 --> 00:08:21.120 The middle window is running a tail -f 00:08:21.120 --> 00:08:27.440 on the dribble file piped to fold -w1. 08:27.440 --> 00:08:30.720 This lets you see the raw ASCII characters 00:08:30.720 --> 00:08:34.479 as I type them. 08:34.479 --> 00:08:37.839 The right window is the empty buffer 00:08:37.839 --> 00:08:41.680 on the ex.fa file. 08:41.680 --> 00:08:44.560 Anything that I described here 00:08:44.560 --> 00:08:49.040 can be done with virgin Emacs distribution 08:49.040 --> 08:51.360 with nothing added, 08:51.360 --> 08:53.760 but I'm using Blee 08:53.760 --> 08:57.120 (By* Libre-Halaal Emacs Environment) 08:57.120 --> 00:09:02.720 to show things. You don't need to have blee 00:09:02.720 --> 00:09:07.600 for writing the equivalent of the text 00:09:07.600 --> 00:09:10.800 in this gif-cast. 09:10.800 --> 00:09:13.440 First, I'm going to select 00:09:13.440 --> 00:09:16.800 the farsi-transliterate-banan. 09:16.800 --> 00:09:22.080 I'm entering C-x RET C-\ . 09:22.080 --> 00:09:23.839 Notice the mode -ine 00:09:23.839 --> 00:09:27.040 and the prompt at mini-buffer. 09:27.040 --> 09:30.399 With completion, I'm going to select 09:30.399 --> 09:34.000 farsi-transliterate-banan. 09:34.000 --> 00:09:38.560 Notice that farsi-isiri-9147 09:38.560 --> 09:43.360 was also provided as a choice. 09:43.360 --> 00:09:47.440 Also notice that the letter 'b' appears 00:09:47.440 --> 00:09:51.760 in the left of the mode line of ex.fa. 09:51.760 --> 00:09:54.000 This indicates which input method 00:09:54.000 --> 00:09:56.320 has been selected. 09:56.320 --> 00:09:58.560 Also notice that cursor is on 00:09:58.560 --> 00:10:04.399 the top left corner of ex.fa. 10:04.399 --> 10:08.800 Next, I'm going to enter the 's' character. 10:08.800 --> 10:12.000 Notice the cursor moved to the right, 10:12.000 --> 00:10:15.120 and unshaped ’seen’ appeared 00:10:15.120 --> 00:10:20.079 in the ex.fa buffer, on the mode-line, 10:20.079 --> 10:23.760 and in the keycast log buffer. 10:23.760 --> 00:10:28.000 Next, I'm going to enter 'l'. 10:28.000 --> 00:10:32.800 Notice ل in the mode-line, 10:32.800 --> 00:10:39.920 and notice how س was subjected to shaping. 10:39.920 --> 10:42.640 Next I'm going to write the letter 10:42.640 --> 10:44.640 to write the following: 10:44.640 --> 10:50.560 سلام –حال شما چه طوره؟ –با ایمکس همه کار میشه کرد 10:50.560 --> 10:52.480 "Hello, how are you?" 10:52.480 --> 00:10:56.720 You can do everything with Emacs. 10:56.720 --> 11:00.000 Generally, same-sounding Latin characters 11:00.000 --> 00:11:03.920 are used. As usual, vowels are ignored 00:11:03.920 --> 00:11:06.720 unless called for. 11:06.720 --> 11:10.800 Notice that in order to get ح, 11:10.800 --> 11:14.560 i repeated 'h' twice. 11:14.560 --> 11:15.440 ش 11:15.440 --> 11:18.560 is the obvious 'sh'. 11:18.560 --> 11:19.519 چ 11:19.519 --> 11:22.480 is the obvious 'ch'. 11:22.480 --> 00:11:28.640 t, that's the ط is upper case T. 11:28.640 --> 00:11:29.439 ت 00:11:29.439 --> 00:11:31.839 is lowercase t. 11:31.839 --> 11:34.880 That's it. We managed to write in Farsi 11:34.880 --> 11:38.640 with a QWERTY keyboard, intuitively. 11:38.640 --> 11:40.959 Next, we are going to switch back to 11:40.959 --> 00:11:45.680 globish and write "back to globish". 11:45.680 --> 00:11:47.920 Notice that the globish sentence 00:11:47.920 --> 00:11:50.959 started from the left side. 11:50.959 --> 00:11:53.279 This is due to proper detection 00:11:53.279 --> 00:12:00.159 of paragraph directionality by Emacs. 12:00.160 --> 00:12:05.600 For the most part, Emacs is self-documenting. 12:05.600 --> 12:07.920 Here we are pointing you to some 12:07.920 --> 12:12.880 relevant self-contained Emacs resources. 12:12.880 --> 00:12:15.680 The BIDI documentation applies to 00:12:15.680 --> 00:12:18.000 all BIDI scripts, 12:18.000 --> 12:22.079 not just Perso-Arabic scripts. 12:22.079 --> 00:12:23.279 Referring to the code 00:12:23.279 --> 00:12:27.999 can also be useful for some. 12:28.000 --> 12:30.079 Here are some pointers. 12:30.079 --> 00:12:32.399 The Quail translation code 00:12:32.399 --> 00:12:35.519 for Persian input methods: 00:12:35.519 --> 00:12:39.120 the persian.el file has full details 00:12:39.120 --> 00:12:43.999 of the mapping and some documentation. 12:44.000 --> 00:12:46.639 Next, we'll show the keyboard layouts 00:12:46.639 --> 00:12:51.519 as a gif-cast. You can get 00:12:51.519 --> 00:12:55.519 relevant documentation for any input method 12:55.519 --> 00:13:00.320 with the describe-input-method command. 13:00.320 --> 00:13:05.920 So, let's try that for farsi-transliterate-banan. 00:13:05.920 --> 00:13:09.360 We are back in the ex.fa buffer 00:13:09.360 --> 00:13:11.279 as one window. 13:11.279 --> 13:13.839 We don't need the keycast logging 13:13.839 --> 13:17.040 and the dribble windows any more. 13:17.040 --> 13:20.320 With the C-\, I reactivate 13:20.320 --> 13:23.360 the farsi input method. 13:23.360 --> 00:13:26.399 Notice that keycast is still active 00:13:26.399 --> 00:13:29.360 on the mode line. 13:29.360 --> 00:13:34.240 Next, with the C-h C-\ , 00:13:34.240 --> 00:13:38.560 I get the input methods documentation. 13:38.560 --> 00:13:40.639 I then delete other windows 00:13:40.639 --> 00:13:45.440 and keep the help buffer visible. 13:45.440 --> 00:13:47.279 Notice that beh 00:13:47.279 --> 00:13:52.720 in this input methods identifier. 13:52.720 --> 13:55.920 Here is the URL for full documentation 13:55.920 --> 00:14:00.639 on the web. The keyboard layout itself 00:14:00.639 --> 00:14:03.760 is a one-to-one mapping, but towards 00:14:03.760 --> 00:14:07.360 making transliteration intuitive. 14:07.360 --> 14:10.240 Multiple keys are sometimes mapped to 14:10.240 --> 14:12.079 the same letter. 14:12.079 --> 00:14:19.760 For example, both 'i' and 'y' produce yeh. 14:19.760 --> 14:22.959 The usual two letter transliterations 14:22.959 --> 00:14:29.600 ending with 'h' -- zh, ch, sh, and kh 00:14:29.600 --> 00:14:34.160 are provided. The ampersand prefix 00:14:34.160 --> 00:14:37.440 is used to support often invisible 14:37.440 --> 00:14:41.600 BIDI markings. In addition to this 00:14:41.600 --> 00:14:43.920 internal documentation, 00:14:43.920 --> 00:14:48.958 full documentation is also available. 14:48.959 --> 00:14:50.560 Complete documentation 00:14:50.560 --> 00:14:52.240 for Persian input methods 00:14:52.240 --> 00:14:58.560 is available as PLPC-120036. 14:58.560 --> 00:15:00.880 Next, we'll take a quick look at this 00:15:00.880 --> 00:15:03.600 on the web. 15:03.600 --> 00:15:05.440 You can click on links 00:15:05.440 --> 00:15:07.440 in the reveal web-based form 00:15:07.440 --> 00:15:09.839 of this presentation. 15:09.839 --> 15:15.440 So let's visit PLPC-120036. 15:15.440 --> 00:15:17.600 This document fully describes 00:15:17.600 --> 00:15:20.560 Persian input methods. 15:20.560 --> 00:15:22.320 In addition to HTML, 00:15:22.320 --> 00:15:26.079 you can also obtain it in PDF. 00:15:26.079 --> 00:15:30.079 Let's do that. Of particular interest 00:15:30.079 --> 00:15:33.120 in this document are various tables 15:33.120 --> 00:15:35.839 that enumerate lists of letters 00:15:35.839 --> 00:15:37.120 with their association 00:15:37.120 --> 00:15:41.839 to both Persian input methods. 15:41.839 --> 15:46.240 Let's take a look at a few of these. 15:46.240 --> 00:15:51.360 Table 3, mapping of isiri-6219 15:51.360 --> 15:53.680 (the Farsi character set) 15:53.680 --> 00:15:55.680 to Emacs version input methods 00:15:55.680 --> 00:15:58.720 could be of interest to you, 15:58.720 --> 16:01.040 as well as table 8 16:01.040 --> 16:04.720 for BIDI-related control markups, 16:04.720 --> 00:16:17.518 and table 9, for vowels and other signs. 16:17.519 --> 00:16:19.759 Having covered input methods, 00:16:19.759 --> 00:16:21.279 let's turn our attention 00:16:21.279 --> 00:16:25.199 to ramifications of BIDI and Perso-Arabic 00:16:25.199 --> 00:16:28.480 on various Emacs applications. 16:28.480 --> 00:16:32.160 Since 2012, I have been using Persian text 00:16:32.160 --> 00:16:35.839 in various Emacs applications. 16:35.839 --> 00:16:38.079 In short, my experience has been 00:16:38.079 --> 00:16:42.399 that most Emacs apps are usable, 16:42.399 --> 16:44.880 but they all have glitches 16:44.880 --> 00:16:47.279 that could at a minimum 00:16:47.279 --> 00:16:51.279 annoy Perso-Arabic users. 16:51.279 --> 16:54.639 In this slide, I'm presenting a summary. 16:54.639 --> 00:16:56.399 The glitches with Gnus 00:16:56.399 --> 00:17:00.079 are not all that significant for me. 17:00.079 --> 17:04.240 BBDB glitches can easily be fixed. 17:04.240 --> 00:17:07.679 For Calendar, I have customized my own setup 00:17:07.679 --> 00:17:10.799 to support Persian and Islamic dates 00:17:10.799 --> 00:17:14.079 in Perso-Arabic. Perhaps they should be 00:17:14.079 --> 00:17:17.039 merged upstream, instead of 00:17:17.039 --> 00:17:19.679 dealing with apps one at a time. 00:17:19.679 --> 00:17:21.439 I think it's more reasonable 00:17:21.439 --> 00:17:25.279 to consider them collectively. 17:25.280 --> 00:17:26.880 The glitches that I mentioned 00:17:26.880 --> 00:17:28.799 in the previous slide 17:28.799 --> 17:30.480 have two routes: 17:30.480 --> 17:32.480 some are BIDI-specific 17:32.480 --> 17:35.919 and some are Perso-Arabic-specific. 17:35.919 --> 00:17:36.720 In this slide, 00:17:36.720 --> 00:17:39.280 I have classified them as such 17:39.280 --> 17:42.960 and have made some general suggestions, 17:42.960 --> 00:17:45.679 but all of these at best amount to 00:17:45.679 --> 00:17:47.679 tactical approaches. 17:47.679 --> 00:17:50.160 I think a more strategic approach 00:17:50.160 --> 00:17:53.519 is called for. 17:53.520 --> 17:56.240 The right way to address BIDI-awareness 17:56.240 --> 17:58.559 and other awarenesses 17:58.559 --> 00:18:00.559 is to build them in frameworks 00:18:00.559 --> 00:18:04.160 that Emacs apps can then use. 18:04.160 --> 00:18:08.480 So, I'm proposing that we first create ENML, 00:18:08.480 --> 00:18:11.520 the Emacs Native Markup Language, 00:18:11.520 --> 00:18:16.880 as a Lisp-ish (perhaps even not fully secure) 18:16.880 --> 18:20.320 super-set of HTML5. 18:20.320 --> 18:22.960 With that in place, we can then build on 18:22.960 --> 00:18:25.360 the two decades of experience 00:18:25.360 --> 00:18:27.600 that have produced various 00:18:27.600 --> 00:18:31.039 web application development frameworks 18:31.039 --> 18:33.919 by mimicking one of them. 18:33.919 --> 00:18:35.679 I don't have any running code 00:18:35.679 --> 00:18:39.440 for any of these, but discussing strategy 00:18:39.440 --> 00:18:44.639 need not always be futile. 18:44.640 --> 18:47.679 Emacs has immense potentials, 18:47.679 --> 18:51.120 but those potentials cannot be realized 18:51.120 --> 00:18:54.640 unless we integrate Emacs in the totality 00:18:54.640 --> 00:18:59.840 of a specific complete digital ecosystem. 18:59.840 --> 19:02.000 Over the past two decades, I've been 19:02.000 --> 00:19:03.440 building the contours 00:19:03.440 --> 00:19:06.240 of The Libre-Halaal By* (ByStar) 00:19:06.240 --> 00:19:10.240 digital ecosystem. 19:10.240 --> 19:13.039 Emacs can then be fully integrated into 19:13.039 --> 00:19:16.799 ByStar. It's through such integration 00:19:16.799 --> 00:19:19.679 that full conviviality of Emacs 00:19:19.679 --> 00:19:24.239 can be experienced. 19:24.240 --> 00:19:26.640 Blee, the ByStar Libre-Halaal 00:19:26.640 --> 00:19:30.000 Emacs environment is Emacs 00:19:30.000 --> 00:19:32.720 plus a whole lot of Emacs apps 00:19:32.720 --> 00:19:34.880 integrated with Debian, 00:19:34.880 --> 00:19:38.320 With ByStar services and with BISOS, 00:19:38.320 --> 00:19:42.480 the ByStar Internet Services OS. 19:42.480 --> 00:19:43.600 Perhaps this could be 00:19:43.600 --> 00:19:45.840 the topic of a presentation 00:19:45.840 --> 00:19:46.840 for the 2022 Emacs Conference. 00:19:46.840 --> 00:19:51.559 [captions by Mohsen Banan]