diff options
| author | EmacsConf <emacsconf-org@gnu.org> | 2025-12-06 10:50:44 -0500 |
|---|---|---|
| committer | EmacsConf <emacsconf-org@gnu.org> | 2025-12-06 10:50:44 -0500 |
| commit | 2be79a23fc4128d5dc1df32c60962b7e24d1f071 (patch) | |
| tree | 365c78b6be3c7593f81dd50bbbc5fc228b6771fe | |
| parent | ea0e8f063b8bb755fdf3a8c080ee87a38c790d84 (diff) | |
| download | emacsconf-wiki-2be79a23fc4128d5dc1df32c60962b7e24d1f071.tar.xz emacsconf-wiki-2be79a23fc4128d5dc1df32c60962b7e24d1f071.zip | |
Automated commit
4 files changed, 1857 insertions, 1 deletions
diff --git a/2025/captions/emacsconf-2025-gnus--reading-and-writing-emails-in-gnu-emacs-with-gnus--amin-bandali--main--chapters.vtt b/2025/captions/emacsconf-2025-gnus--reading-and-writing-emails-in-gnu-emacs-with-gnus--amin-bandali--main--chapters.vtt new file mode 100644 index 00000000..fc516878 --- /dev/null +++ b/2025/captions/emacsconf-2025-gnus--reading-and-writing-emails-in-gnu-emacs-with-gnus--amin-bandali--main--chapters.vtt @@ -0,0 +1,50 @@ +WEBVTT + + +00:00:02.620 --> 00:01:25.239 +Introduction + +00:01:25.240 --> 00:02:49.959 +Demo + +00:02:49.960 --> 00:03:58.559 +Don't panic + +00:03:58.560 --> 00:05:46.239 +Configuring servers + +00:05:46.240 --> 00:06:26.599 +.authinfo + +00:06:26.600 --> 00:08:25.719 +Configuration + +00:08:25.720 --> 00:09:40.079 +Starting Gnus + +00:09:40.080 --> 00:10:19.899 +Always showing groups + +00:10:19.900 --> 00:11:30.119 +Reading messages + +00:11:30.120 --> 00:12:55.159 +Debugging IMAP + +00:12:55.160 --> 00:14:25.559 +Topics + +00:14:25.560 --> 00:15:24.319 +Customizing message display + +00:15:24.320 --> 00:17:26.659 +Sending emails + +00:17:26.660 --> 00:19:27.959 +Plans + +00:19:27.960 --> 00:20:12.759 +Wrapping up + +00:20:12.760 --> 00:21:37.760 +nnimap diff --git a/2025/captions/emacsconf-2025-gnus--reading-and-writing-emails-in-gnu-emacs-with-gnus--amin-bandali--main.vtt b/2025/captions/emacsconf-2025-gnus--reading-and-writing-emails-in-gnu-emacs-with-gnus--amin-bandali--main.vtt new file mode 100644 index 00000000..c4e86336 --- /dev/null +++ b/2025/captions/emacsconf-2025-gnus--reading-and-writing-emails-in-gnu-emacs-with-gnus--amin-bandali--main.vtt @@ -0,0 +1,1332 @@ +WEBVTT captioned by sachac + +NOTE Introduction + +00:00:02.620 --> 00:00:04.799 +Hello, my name is Amin Bandali, + +00:00:04.800 --> 00:00:06.359 +and today I'd like to talk about + +00:00:06.360 --> 00:00:08.799 +reading and writing emails in GNU Emacs + +00:00:08.800 --> 00:00:14.319 +using Gnus specifically. + +00:00:14.320 --> 00:00:16.879 +Gnus has had this sort of reputation + +00:00:16.880 --> 00:00:20.599 +of being difficult to approach and configure. + +00:00:20.600 --> 00:00:23.359 +That's understandable + +00:00:23.360 --> 00:00:26.319 +because it has many, many options + +00:00:26.320 --> 00:00:27.679 +and major and minor modes + +00:00:27.680 --> 00:00:30.679 +that interact in different ways with each other. + +00:00:30.680 --> 00:00:35.319 +And it also doesn't help that Gnus started originally + +00:00:35.320 --> 00:00:36.359 +as a newsreader + +00:00:36.360 --> 00:00:38.759 +rather than a mail client. + +00:00:38.760 --> 00:00:40.879 +So a lot of the terminology that it uses + +00:00:40.880 --> 00:00:42.519 +is also rooted in that, + +00:00:42.520 --> 00:00:45.559 +in reading and writing news. + +00:00:45.560 --> 00:00:48.119 +But nevertheless, with this video and talk, + +00:00:48.120 --> 00:00:52.159 +I hope to provide a sort + +00:00:52.160 --> 00:00:55.759 +of very quick introduction + +00:00:55.760 --> 00:00:57.539 +of starting to use Gnus + +00:00:57.540 --> 00:01:00.919 +to read and write email and send it. + +00:01:00.920 --> 00:01:02.679 +We will use Gnus' IMAP support, + +00:01:02.680 --> 00:01:06.119 +mainly because a lot of people + +00:01:06.120 --> 00:01:08.679 +these days have email accounts + +00:01:08.680 --> 00:01:10.759 +with mail service providers + +00:01:10.760 --> 00:01:12.039 +that support IMAP, + +00:01:12.040 --> 00:01:14.319 +which is an open standard. + +00:01:14.320 --> 00:01:17.479 +So it's widely available and supported + +00:01:17.480 --> 00:01:19.719 +across many different providers + +00:01:19.720 --> 00:01:25.239 +as well as mail clients or mail user agents as well. + +NOTE Demo + +00:01:25.240 --> 00:01:30.559 +Okay, so let's just jump straight right in. + +00:01:30.560 --> 00:01:34.279 +I will enter this demo directory that I created + +00:01:34.280 --> 00:01:36.919 +for the purposes of this demonstration + +00:01:36.920 --> 00:01:40.999 +and change my home directory to this one + +00:01:41.000 --> 00:01:49.839 +so that we can safely experiment with Gnus here. + +00:01:49.840 --> 00:01:53.979 +For this presentation, I've written up + +00:01:53.980 --> 00:01:56.839 +a quick initialization file or init file + +00:01:56.840 --> 00:01:59.719 +that I will share afterwards as well + +00:01:59.720 --> 00:02:01.639 +to get us going with Gnus. + +00:02:01.640 --> 00:02:04.519 +There's not much to it at the moment. + +00:02:04.520 --> 00:02:07.399 +Just set up the package archives and + +00:02:07.400 --> 00:02:09.479 +install the keycast package + +00:02:09.480 --> 00:02:14.079 +for showing the key presses in the mode line. + +00:02:14.080 --> 00:02:15.359 +Yeah, that's about it. + +00:02:15.360 --> 00:02:16.239 +And I'll also define + +00:02:16.240 --> 00:02:20.279 +a little like inline function +emacs.d + +00:02:20.280 --> 00:02:24.079 +that allows me to conveniently write + +00:02:24.080 --> 00:02:26.639 +and have it expanded + +00:02:26.640 --> 00:02:29.300 +or refer to files and directories, rather, + +00:02:29.301 --> 00:02:30.900 +paths that we could expand, + +00:02:30.901 --> 00:02:32.833 +inside my Emacs configuration directory. + +00:02:32.834 --> 00:02:37.500 +I also have this eval-last-sexp + +00:02:37.501 --> 00:02:41.119 +bound to a global key, + +00:02:41.120 --> 00:02:43.279 +so that I will be able to easily + +00:02:43.280 --> 00:02:47.519 +use it for this talk. + +00:02:47.520 --> 00:02:49.959 +Okay, let's jump right in. + +NOTE Don't panic + +00:02:49.960 --> 00:02:52.239 +First things first, don't panic. + +00:02:52.240 --> 00:02:55.267 +And that's actually also the name + +00:02:55.268 --> 00:02:58.359 +of the very first node + +00:02:58.360 --> 00:03:01.559 +in the Gnus manual when you open it. + +00:03:01.560 --> 00:03:02.839 +And it's actually nice. + +00:03:02.840 --> 00:03:04.479 +I definitely, definitely recommend + +00:03:04.480 --> 00:03:07.079 +that you look through + +00:03:07.080 --> 00:03:10.199 +at least the very first couple of chapters of this, + +00:03:10.200 --> 00:03:14.199 +skim through it, and later on refer to it + +00:03:14.200 --> 00:03:16.133 +whenever you find something confusing + +00:03:16.134 --> 00:03:19.499 +or don't understand it. + +00:03:19.500 --> 00:03:21.359 +But yeah, we'll start + +00:03:21.360 --> 00:03:22.399 +with these two paragraphs here. + +00:03:22.400 --> 00:03:23.639 +So again, a Gnus installation + +00:03:23.640 --> 00:03:28.119 +is basically just a list of one or more servers + +00:03:28.120 --> 00:03:30.119 +and the subscribed groups from those servers + +00:03:30.120 --> 00:03:32.319 +and articles in those groups. + +00:03:32.320 --> 00:03:34.279 +You can already kind of see + +00:03:34.280 --> 00:03:39.479 +where that influence of a newsreader comes in. + +00:03:39.480 --> 00:03:41.839 +But yeah, basically what it's saying is that, + +00:03:41.840 --> 00:03:43.839 +you know, we have one or more servers. + +00:03:43.840 --> 00:03:47.079 +We can think of them as email servers. + +00:03:47.080 --> 00:03:49.359 +Groups can be like, we can think + +00:03:49.360 --> 00:03:52.959 +of them as folders or directories. + +00:03:52.960 --> 00:03:55.239 +And yeah, articles, + +00:03:55.240 --> 00:03:58.559 +those would be like our email messages. + +NOTE Configuring servers + +00:03:58.560 --> 00:03:59.679 +With Gnus, we can add + +00:03:59.680 --> 00:04:06.119 +and configure servers mainly using two variables. + +00:04:06.120 --> 00:04:07.919 +One of them is the gnus-select-method + +00:04:07.920 --> 00:04:11.479 +and the other is gnus-secondary-select-methods. + +00:04:11.480 --> 00:04:15.759 +The first one predates the second one + +00:04:15.760 --> 00:04:17.559 +and I generally don't recommend using it, because + +00:04:17.560 --> 00:04:22.559 +first of all, it can only point + +00:04:22.560 --> 00:04:26.359 +to one server, and that server, + +00:04:26.360 --> 00:04:27.879 +because it's the primary, + +00:04:27.880 --> 00:04:32.559 +then Gnus won't add a prefix to its groups, + +00:04:32.560 --> 00:04:34.839 +so later on, as you get into + +00:04:34.840 --> 00:04:36.679 +more advanced features of Gnus + +00:04:36.680 --> 00:04:38.519 +and, for example, want to write rules + +00:04:38.520 --> 00:04:42.959 +to modify your message composition + +00:04:42.960 --> 00:04:47.039 +in a way for certain groups, or file mail, + +00:04:47.040 --> 00:04:48.799 +automatically classify mail, + +00:04:48.800 --> 00:04:51.879 +this distinction can become + +00:04:51.880 --> 00:04:53.959 +confusing and annoying. + +00:04:53.960 --> 00:04:57.199 +My recommendation is to always and only use + +00:04:57.200 --> 00:05:01.799 +the gnus-secondary-select-methods. + +00:05:01.800 --> 00:05:07.319 +Yeah, so let's do that here. + +00:05:07.320 --> 00:05:10.299 +I'm gonna uncomment this portion. + +00:05:10.300 --> 00:05:16.419 +So here, I set the primary select method to nil, + +00:05:16.420 --> 00:05:24.159 +and the second one, I define an nnimap server + +00:05:24.160 --> 00:05:30.039 +of the nnimap backend. + +00:05:30.040 --> 00:05:32.439 +I give it the name ec25gnus. + +00:05:32.440 --> 00:05:35.879 +What I want it to do is to + +00:05:35.880 --> 00:05:37.799 +connect to my mail server, + +00:05:37.800 --> 00:05:41.079 +which is at this address, + +00:05:41.080 --> 00:05:46.239 +and fetch emails from it over TLS with this username. + +NOTE .authinfo + +00:05:46.240 --> 00:05:50.719 +And then the passwords or the credentials, + +00:05:50.720 --> 00:05:56.839 +you can put them in the .authinfo file. + +00:05:56.840 --> 00:05:58.799 +Normally, you would want to, for example, + +00:05:58.800 --> 00:06:03.719 +encrypt this file with your GPG key. + +00:06:03.720 --> 00:06:06.719 +But for this demonstration, I haven't. + +00:06:06.720 --> 00:06:10.479 +So yeah, the format is the keyword "machine" + +00:06:10.480 --> 00:06:15.239 +followed by the name of your Gnus server or account, + +00:06:15.240 --> 00:06:17.199 +followed by the word "login", + +00:06:17.200 --> 00:06:19.199 +then your login username, + +00:06:19.200 --> 00:06:23.959 +and then the password, which here it's not shown. + +00:06:23.960 --> 00:06:26.599 +Yeah. + +NOTE Configuration + +00:06:26.600 --> 00:06:28.679 +But before we actually set this, + +00:06:28.680 --> 00:06:31.479 +I'll just show you that if we like start Gnus + +00:06:31.480 --> 00:06:33.719 +with M-x gnus, + +00:06:33.720 --> 00:06:36.439 +initially, it will just show + +00:06:36.440 --> 00:06:37.759 +an error like this. + +00:06:37.760 --> 00:06:40.399 +Even if we continue, it's empty. + +00:06:40.400 --> 00:06:43.399 +There's not much because Gnus doesn't know + +00:06:43.400 --> 00:06:47.039 +where to fetch these emails from. + +00:06:47.040 --> 00:06:52.159 +And that's what we will configure. + +00:06:52.160 --> 00:06:55.859 +Excuse me. + +00:06:55.860 --> 00:06:57.559 +Yeah, so just for convenience, + +00:06:57.560 --> 00:06:59.079 +we can bind Gnus to, + +00:06:59.080 --> 00:07:00.679 +for example, C-c g, as I've done here. + +00:07:00.680 --> 00:07:04.119 +You will want to set your name + +00:07:04.120 --> 00:07:05.799 +and email address, like so. + +00:07:05.800 --> 00:07:09.239 +Here we tell Emacs + +00:07:09.240 --> 00:07:11.439 +that we are going to be using Gnus for reading email, + +00:07:11.440 --> 00:07:12.839 +because Emacs comes + +00:07:12.840 --> 00:07:14.759 +with other email clients as well, + +00:07:14.760 --> 00:07:18.559 +such as Rmail, and in fact, defaults to Rmail, + +00:07:18.560 --> 00:07:24.839 +so this way, we tell it to use Gnus. + +00:07:24.840 --> 00:07:31.559 +By default, Gnus puts its newsrc file and other files, + +00:07:31.560 --> 00:07:34.319 +I believe it still scatters them + +00:07:34.320 --> 00:07:35.439 +in a few different directories + +00:07:35.440 --> 00:07:36.279 +in your home directory, + +00:07:36.280 --> 00:07:37.399 +so it's a little bit messy. + +00:07:37.400 --> 00:07:40.039 +So what I prefer to do is to just put it + +00:07:40.040 --> 00:07:42.439 +all under the Gnus directory + +00:07:42.440 --> 00:07:47.439 +inside of my Emacs configuration, as I do here. + +00:07:47.440 --> 00:07:50.639 +Yeah, and then here we just tell Gnus + +00:07:50.640 --> 00:07:53.319 +to, like, don't try to bother + +00:07:53.320 --> 00:07:55.759 +with a generic newsrc file + +00:07:55.760 --> 00:07:57.119 +that would be shared + +00:07:57.120 --> 00:07:58.399 +with other news readers. + +00:07:58.400 --> 00:07:59.679 +Just want to use it for email. + +00:07:59.680 --> 00:08:01.959 +And yeah, so we just tell Gnus + +00:08:01.960 --> 00:08:03.039 +to keep all of its data + +00:08:03.040 --> 00:08:08.079 +inside a dedicated .newsrc.eld + +00:08:08.080 --> 00:08:12.159 +(for Emacs Lisp data) file instead. + +00:08:12.160 --> 00:08:15.199 +And we can also have Gnus not prompt us + +00:08:15.200 --> 00:08:19.679 +when we want to exit with q. + +00:08:19.680 --> 00:08:23.399 +Anyway, so let's go ahead and evaluate this. + +00:08:23.400 --> 00:08:25.719 +So this has been set, + +NOTE Starting Gnus + +00:08:25.720 --> 00:08:32.267 +so if we type M-x gnus again, or hit C-c g, + +00:08:32.268 --> 00:08:35.699 +now we're faced with an empty buffer, + +00:08:35.700 --> 00:08:37.399 +and it says no news is good news, + +00:08:37.400 --> 00:08:38.399 +and that's actually + +00:08:38.400 --> 00:08:40.719 +one of the characteristics of Gnus + +00:08:40.720 --> 00:08:44.779 +is that by default it tries + +00:08:44.780 --> 00:08:47.619 +to like sort of declutter + +00:08:47.620 --> 00:08:49.199 +and show us a little less possible + +00:08:49.200 --> 00:08:50.819 +in the group buffer, + +00:08:50.820 --> 00:08:53.259 +meaning that if you don't have + +00:08:53.260 --> 00:08:55.639 +any groups with unread or marked + +00:08:55.640 --> 00:09:00.119 +or, like, starred messages, it will not show them. + +00:09:00.120 --> 00:09:03.959 +To actually see all of our groups or folders, + +00:09:03.960 --> 00:09:08.359 +we hit shift L or capital L, + +00:09:08.360 --> 00:09:12.419 +and we see that we have an inbox here, + +00:09:12.420 --> 00:09:14.879 +as expected. So we enter the inbox, + +00:09:14.880 --> 00:09:17.459 +and we see that there is an article there + +00:09:17.460 --> 00:09:20.779 +and it's already been marked as read. + +00:09:20.780 --> 00:09:22.679 +But if we mark it as unread + +00:09:22.680 --> 00:09:25.959 +and exit and enter Gnus again, + +00:09:25.960 --> 00:09:27.279 +this is what we would see. + +00:09:27.280 --> 00:09:28.839 +We would see that our group + +00:09:28.840 --> 00:09:34.099 +and then we enter it, we see our mail here. + +00:09:34.100 --> 00:09:36.159 +Yeah, and this is our very first email + +00:09:36.160 --> 00:09:40.079 +that we read in GNU Emacs here, inside Gnus. + +NOTE Always showing groups + +00:09:40.080 --> 00:09:43.839 +It might be useful to have Gnus always show + +00:09:43.840 --> 00:09:46.839 +certain groups or folders + +00:09:46.840 --> 00:09:48.319 +even if they don't have + +00:09:48.320 --> 00:09:52.339 +anything unread or marked inside of them. + +00:09:52.340 --> 00:09:56.039 +The way we can do that is + +00:09:56.040 --> 00:09:57.599 +by setting this variable + +00:09:57.600 --> 00:10:01.339 +gnus-permanently-visible-groups + +00:10:01.340 --> 00:10:03.039 +to a regular expression + +00:10:03.040 --> 00:10:09.119 +that describes the name of these groups. + +00:10:09.120 --> 00:10:11.539 +So if we launch Gnus again, + +00:10:11.540 --> 00:10:14.759 +this time, we see that that group is visible, + +00:10:14.760 --> 00:10:19.899 +even though there's no unread messages in it. + +NOTE Reading messages + +00:10:19.900 --> 00:10:24.399 +When we enter a group or folder, + +00:10:24.400 --> 00:10:26.719 +we will see a list of all of our messages. + +00:10:26.720 --> 00:10:27.799 +Here, we only have one. + +00:10:27.800 --> 00:10:31.939 +We can press M-u or Alt-u + +00:10:31.940 --> 00:10:34.679 +to mark something as unread. + +00:10:34.680 --> 00:10:38.539 +You can press d to mark it as read. + +00:10:38.540 --> 00:10:40.079 +If you press just u, + +00:10:40.080 --> 00:10:41.959 +it'll tick the article, + +00:10:41.960 --> 00:10:44.039 +which is kind of the equivalent + +00:10:44.040 --> 00:10:46.999 +of marking the message or email + +00:10:47.000 --> 00:10:50.539 +as starred in other email clients + +00:10:50.540 --> 00:10:55.719 +such as Thunderbird. + +00:10:55.720 --> 00:11:00.639 +We see that when there are groups + +00:11:00.640 --> 00:11:03.959 +that have starred or ticked messages + +00:11:03.960 --> 00:11:04.679 +inside of them, + +00:11:04.680 --> 00:11:05.599 +Gnus will mark them + +00:11:05.600 --> 00:11:16.019 +with this little star here, or asterisk. + +00:11:16.020 --> 00:11:17.639 +This talk is just barely + +00:11:17.640 --> 00:11:19.039 +scratching the surface. + +00:11:19.040 --> 00:11:21.080 +Let's see how far... + +00:11:21.081 --> 00:11:22.759 +How am I doing with the time? + +00:11:22.760 --> 00:11:30.119 +Okay, 11 minutes already. + +NOTE Debugging IMAP + +00:11:30.120 --> 00:11:32.079 +Just a couple of helpful things here, + +00:11:32.080 --> 00:11:36.919 +like this nnimap-record-commands variable. + +00:11:36.920 --> 00:11:38.519 +It's useful when you want to debug + +00:11:38.520 --> 00:11:40.119 +your IMAP setup with Gnus. + +00:11:40.120 --> 00:11:42.859 +If you set it to anything non-nil, + +00:11:42.860 --> 00:11:46.699 +it will log the commands that it runs + +00:11:46.700 --> 00:11:49.539 +to a special `*imap log*` buffer. + +00:11:49.540 --> 00:11:50.719 +And here I just set it + +00:11:50.720 --> 00:11:52.679 +to this init-file-debug variable, + +00:11:52.680 --> 00:11:55.159 +which is set to non-nil + +00:11:55.160 --> 00:11:56.439 +whenever you launch Emacs + +00:11:56.440 --> 00:11:59.279 +with the --debug-init switch, + +00:11:59.280 --> 00:12:02.239 +so that's pretty helpful. + +00:12:02.240 --> 00:12:05.119 +You want to also set your sent folder, + +00:12:05.120 --> 00:12:07.479 +basically, where Gnus will save + +00:12:07.480 --> 00:12:09.439 +a copy of the message that you just sent. + +00:12:09.440 --> 00:12:12.799 +Normally, I think the convention these days is, + +00:12:12.800 --> 00:12:16.599 +a lot of you know servers and clients + +00:12:16.600 --> 00:12:18.799 +use a dedicated sent folder, + +00:12:18.800 --> 00:12:24.339 +but with Gnus, I just prefer to use INBOX itself. + +00:12:24.340 --> 00:12:27.119 +Mainly because then I will have + +00:12:27.120 --> 00:12:28.759 +threading working for free, + +00:12:28.760 --> 00:12:31.939 +so I can read the entire thread + +00:12:31.940 --> 00:12:34.299 +of an email chain there in one place. + +00:12:34.300 --> 00:12:35.319 +Of course, we don't have to keep + +00:12:35.320 --> 00:12:38.899 +the messages in there forever. + +00:12:38.900 --> 00:12:42.079 +And in fact, Gnus has facilities, + +00:12:42.080 --> 00:12:43.479 +both manual and automated, + +00:12:43.480 --> 00:12:45.999 +for expiring emails into + +00:12:46.000 --> 00:12:52.679 +different locations or different folders. + +00:12:52.680 --> 00:12:55.159 +Yeah. So let's move on here. + +NOTE Topics + +00:12:55.160 --> 00:13:02.039 +Topics are another nice feature of Gnus. + +00:13:02.040 --> 00:13:03.279 +So this is useful + +00:13:03.280 --> 00:13:05.359 +for creating some topics + +00:13:05.360 --> 00:13:08.459 +and then classifying or grouping + +00:13:08.460 --> 00:13:10.599 +your directories there. + +00:13:10.600 --> 00:13:11.799 +So we will see the use + +00:13:11.800 --> 00:13:13.639 +of this in a moment, + +00:13:13.640 --> 00:13:17.019 +where, let's say, I want to add + +00:13:17.020 --> 00:13:19.999 +a second account to Gnus. + +00:13:20.000 --> 00:13:23.559 +This one I'm going to call ec25work. + +00:13:23.560 --> 00:13:24.679 +Let's pretend that + +00:13:24.680 --> 00:13:29.859 +this is my work email. + +00:13:29.860 --> 00:13:32.479 +So if we open Gnus now, + +00:13:32.480 --> 00:13:36.999 +we see that our work INBOX + +00:13:37.000 --> 00:13:37.959 +also shows up here. + +00:13:37.960 --> 00:13:41.299 +And because we enabled topic mode, + +00:13:41.300 --> 00:13:42.359 +we see that we have + +00:13:42.360 --> 00:13:43.439 +these sort of buttons + +00:13:43.440 --> 00:13:44.839 +like Gnus and misc here. + +00:13:44.840 --> 00:13:46.679 +And we can, I believe, + +00:13:46.680 --> 00:13:49.799 +create a topic with capital T n. + +00:13:49.800 --> 00:13:52.879 +We can call it personal, this one. + +00:13:52.880 --> 00:13:56.939 +Let's create another one, work. + +00:13:56.940 --> 00:13:59.579 +And then what we can do is go + +00:13:59.580 --> 00:14:02.799 +over the directory that we want, + +00:14:02.800 --> 00:14:04.759 +for example, this one, + +00:14:04.760 --> 00:14:08.219 +hit capital T m to move it + +00:14:08.220 --> 00:14:11.899 +to the personal topic, + +00:14:11.900 --> 00:14:13.079 +and this work one, + +00:14:13.080 --> 00:14:15.199 +move it to the work topic. + +00:14:15.200 --> 00:14:17.439 +So we can nicely classify + +00:14:17.440 --> 00:14:23.119 +and group our groups folders here, + +00:14:23.120 --> 00:14:24.719 +which is especially useful + +00:14:24.720 --> 00:14:25.559 +when you have hundreds of them. + +NOTE Customizing message display + +00:14:25.560 --> 00:14:29.759 +Anyhow, we can customize + +00:14:29.760 --> 00:14:35.039 +different aspects of message display. + +00:14:35.040 --> 00:14:35.839 +Like for example, + +00:14:35.840 --> 00:14:38.199 +we can this way customize + +00:14:38.200 --> 00:14:39.199 +and change the order of + +00:14:39.200 --> 00:14:41.599 +which headers we want to see and where. + +00:14:41.600 --> 00:14:45.199 +So if I launch Gnus + +00:14:45.200 --> 00:14:48.459 +and go back to this email here, + +00:14:48.460 --> 00:14:52.139 +these are the headers that we see at the top. + +00:14:52.140 --> 00:14:52.639 +Excuse me. + +00:14:52.640 --> 00:14:55.159 +And with Gnus we can always + +00:14:55.160 --> 00:14:57.799 +We can have it show all the headers + +00:14:57.800 --> 00:15:01.999 +by pressing t to toggle the headers. + +00:15:02.000 --> 00:15:04.579 +Here we can see all the nitty-gritty + +00:15:04.580 --> 00:15:06.359 +and all of the headers in the message + +00:15:06.360 --> 00:15:12.219 +and we can toggle it back with t again. + +00:15:12.220 --> 00:15:16.479 +We can modify and customize the sorting + +00:15:16.480 --> 00:15:20.019 +with dedicated sorting functions. + +00:15:20.020 --> 00:15:20.999 +It comes with a number of them + +00:15:21.000 --> 00:15:21.599 +out of the box + +00:15:21.600 --> 00:15:24.319 +but we can define them as well. + +NOTE Sending emails + +00:15:24.320 --> 00:15:29.759 +Now to send emails. Let's see. + +00:15:29.760 --> 00:15:30.999 +We will be using message, + +00:15:31.000 --> 00:15:34.939 +and that's what Gnus itself uses. + +00:15:34.940 --> 00:15:38.579 +So I will set things up here. + +00:15:38.580 --> 00:15:42.639 +Let's see. + +00:15:42.640 --> 00:15:44.519 +Okay, so first of all, + +00:15:44.520 --> 00:15:46.439 +we want to have Gnus mark + +00:15:46.440 --> 00:15:48.519 +the messages that we write to others + +00:15:48.520 --> 00:15:49.759 +as read automatically, + +00:15:49.760 --> 00:15:51.359 +so this option does that. + +00:15:51.360 --> 00:15:58.039 +And then we define posting styles this way + +00:15:58.040 --> 00:16:01.619 +using the prefix, the name + +00:16:01.620 --> 00:16:04.359 +of the IMAP server. + +00:16:04.360 --> 00:16:06.519 +And this is how we can tell it to use + +00:16:06.520 --> 00:16:09.199 +what email address for the From [header] + +00:16:09.200 --> 00:16:14.599 +and which SMTP server to send it with. + +00:16:14.600 --> 00:16:17.879 +Yeah, and then gcc is where Gnus will save + +00:16:17.880 --> 00:16:20.199 +the copy of the messages that we write. + +00:16:20.200 --> 00:16:24.139 +So if we go ahead and launch Gnus again. + +00:16:24.140 --> 00:16:26.279 +We can go into our personal email here, + +00:16:26.280 --> 00:16:28.919 +hit m to compose a new message. + +00:16:28.920 --> 00:16:33.559 +We can prepare an email to, + +00:16:33.560 --> 00:16:35.119 +let's say, our work address. + +00:16:35.120 --> 00:16:42.419 +Hello from EmacsConf 2025 Gnus talk. + +00:16:42.420 --> 00:16:47.639 +Hello, this is just a test. :) + +00:16:47.640 --> 00:16:55.739 +Yeah, and we hit send. + +00:16:55.740 --> 00:16:56.919 +The sending will be done + +00:16:56.920 --> 00:17:03.479 +using Emacs's built-in SMTP libraries. + +00:17:03.480 --> 00:17:05.119 +Sometimes it can take a moment. + +00:17:05.120 --> 00:17:07.599 +Okay, that's it. It's done. + +00:17:07.600 --> 00:17:09.259 +So if we go back out + +00:17:09.260 --> 00:17:11.559 +and if we hit g to get new news, + +00:17:11.560 --> 00:17:15.679 +we should be able to see our new email there + +00:17:15.680 --> 00:17:17.639 +in the other account that we just sent it to. + +00:17:17.640 --> 00:17:22.360 +So we can come here, open it, + +00:17:22.361 --> 00:17:26.659 +and there we go. + +NOTE Plans + +00:17:26.660 --> 00:17:29.239 +There is a lot to configure in Gnus, + +00:17:29.240 --> 00:17:31.439 +and we're just barely scratching the surface, + +00:17:31.440 --> 00:17:34.079 +and unfortunately I don't have the time + +00:17:34.080 --> 00:17:34.999 +to explain all of these + +00:17:35.000 --> 00:17:36.519 +but I do plan on doing + +00:17:36.520 --> 00:17:38.839 +a much longer running series, + +00:17:38.840 --> 00:17:41.499 +whether it's text or videos, + +00:17:41.500 --> 00:17:42.879 +showing how to configure + +00:17:42.880 --> 00:17:45.319 +and use a lot of these different aspects of Gnus. + +00:17:45.320 --> 00:17:49.519 +But yeah, here, near the end, just a couple of... + +00:17:49.520 --> 00:17:54.919 +quick things. I find it's nice to have message + +00:17:54.920 --> 00:17:56.519 +prompt us for [confirmation] + +00:17:56.520 --> 00:17:59.199 +that we do want to send a message. + +00:17:59.200 --> 00:18:01.359 +Actually, when it does that, I take + +00:18:01.360 --> 00:18:02.599 +another look over my email + +00:18:02.600 --> 00:18:07.059 +to make sure I don't have any typos. + +00:18:07.060 --> 00:18:09.519 +It's generally a good idea to wrap your messages + +00:18:09.520 --> 00:18:14.119 +around 70 or 72 characters. + +00:18:14.120 --> 00:18:16.619 +We do that here. + +00:18:16.620 --> 00:18:19.159 +We can tell Gnus to forward messages + +00:18:19.160 --> 00:18:22.599 +as a proper MIME part, + +00:18:22.600 --> 00:18:27.059 +instead of some half-broken way. + +00:18:27.060 --> 00:18:30.119 +This customization, the sendmail function, + +00:18:30.120 --> 00:18:34.239 +is how we tell Gnus with message + +00:18:34.240 --> 00:18:38.239 +to use the SMTP library to sending the email, + +00:18:38.240 --> 00:18:42.479 +and these two variables are useful for + +00:18:42.480 --> 00:18:45.959 +omitting our own email address + +00:18:45.960 --> 00:18:47.439 +when we want to send someone, + +00:18:47.440 --> 00:18:50.179 +like when we hit r, to reply to someone. + +00:18:50.180 --> 00:18:51.959 +if we configure these variables, + +00:18:51.960 --> 00:18:52.959 +then Gnus won't add + +00:18:52.960 --> 00:18:56.059 +our own address to the To or Cc, + +00:18:56.060 --> 00:18:58.479 +which is pretty useful. + +00:18:58.480 --> 00:18:59.919 +I also find it helpful + +00:18:59.920 --> 00:19:03.359 +to unbind C-c C-s. + +00:19:03.360 --> 00:19:04.974 +That's another key + +00:19:04.975 --> 00:19:06.319 +for sending the message [in addition to C-c C-c]. + +00:19:06.320 --> 00:19:09.719 +And because C-c C-d, + +00:19:09.720 --> 00:19:13.359 +which is very close to it on the QWERTY layout, + +00:19:13.360 --> 00:19:15.719 +is useful for saving a draft + +00:19:15.720 --> 00:19:16.839 +and then coming back to it, + +00:19:16.840 --> 00:19:20.079 +I don't want to accidentally hit C-c C-s, + +00:19:20.080 --> 00:19:22.039 +and send the message prematurely. + +00:19:22.040 --> 00:19:25.979 +So I unbind it. + +00:19:25.980 --> 00:19:27.959 +Yeah, anyway, that's about it. + +NOTE Wrapping up + +00:19:27.960 --> 00:19:31.039 +That's a kind of very quick tour + +00:19:31.040 --> 00:19:37.119 +and introduction of setting up Gnus. + +00:19:37.120 --> 00:19:40.719 +Here, we just configured a remote IMAP server, + +00:19:40.720 --> 00:19:43.519 +but we can also, of course, + +00:19:43.520 --> 00:19:46.359 +set up a local IMAP server such as Dovecot + +00:19:46.360 --> 00:19:48.399 +and point Gnus to there, + +00:19:48.400 --> 00:19:52.799 +and use programs like OfflineIMAP, I believe, + +00:19:52.800 --> 00:19:57.479 +or the mbsync program from isync package + +00:19:57.480 --> 00:20:02.939 +or isync project to synchronize our messages + +00:20:02.940 --> 00:20:04.479 +to local mail directories + +00:20:04.480 --> 00:20:06.279 +and then point Gnus to it. + +00:20:06.280 --> 00:20:08.359 +The reason we might want to use that + +00:20:08.360 --> 00:20:11.719 +is to always have a copy of our messages at hand + +00:20:11.720 --> 00:20:12.759 +so we can use offline. + +NOTE nnimap + +00:20:12.760 --> 00:20:17.439 +And why use nnimap specifically? + +00:20:17.440 --> 00:20:27.399 +As of now, the Maildir backend included with Gnus + +00:20:27.400 --> 00:20:29.679 +is very inefficient, + +00:20:29.680 --> 00:20:31.399 +especially when dealing with + +00:20:31.400 --> 00:20:33.839 +tens or hundreds of thousands of messages + +00:20:33.840 --> 00:20:36.659 +like some of us are. + +00:20:36.660 --> 00:20:38.759 +It just takes an eternity to try + +00:20:38.760 --> 00:20:43.259 +and index them and get going. + +00:20:43.260 --> 00:20:44.639 +In that case, what I recommend doing + +00:20:44.640 --> 00:20:47.799 +is instead of interfacing directly with Maildir, + +00:20:47.800 --> 00:20:52.359 +for Gnus, just install and run + +00:20:52.360 --> 00:20:54.359 +Dovecot, a local IMAP server, + +00:20:54.360 --> 00:20:59.819 +and point Gnus to that. + +00:20:59.820 --> 00:21:02.959 +I plan on writing tutorials or doing videos + +00:21:02.960 --> 00:21:06.639 +about these other aspects + +00:21:06.640 --> 00:21:10.519 +of configuring Gnus after the conference. + +00:21:10.520 --> 00:21:11.439 +That's about it for me, + +00:21:11.440 --> 00:21:14.119 +so I hope you find this helpful. + +00:21:14.120 --> 00:21:16.679 +If you have any questions, + +00:21:16.680 --> 00:21:18.239 +please feel free to email me + +00:21:18.240 --> 00:21:23.759 +at bandali@gnu.org or @kelar.org. + +00:21:23.760 --> 00:21:25.879 +You can take a look at my personal website + +00:21:25.880 --> 00:21:26.839 +where I plan on posting + +00:21:26.840 --> 00:21:31.059 +other Emacs and Gnus materials. + +00:21:31.060 --> 00:21:33.039 +And yeah, thank you for watching + +00:21:33.040 --> 00:21:35.159 +and I hope you enjoy the rest of the conference. + +00:21:35.160 --> 00:21:37.760 +Take care. diff --git a/2025/info/gnus-after.md b/2025/info/gnus-after.md index f36b6ba8..bb76010d 100644 --- a/2025/info/gnus-after.md +++ b/2025/info/gnus-after.md @@ -1,6 +1,462 @@ <!-- Automatically generated by emacsconf-publish-after-page --> +<div class="transcript transcript-mainVideo"><a name="gnus-mainVideo-transcript"></a><h1>Transcript</h1> + + +<div class="transcript-heading">[[!template new="1" text="""Introduction""" start="00:00:02.620" video="mainVideo-gnus" id="subtitle"]]</div>[[!template text="""Hello, my name is Amin Bandali,""" start="00:00:02.620" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""and today I'd like to talk about""" start="00:00:04.800" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""reading and writing emails in GNU Emacs""" start="00:00:06.360" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""using Gnus specifically.""" start="00:00:08.800" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""Gnus has had this sort of reputation""" start="00:00:14.320" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""of being difficult to approach and configure.""" start="00:00:16.880" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""That's understandable""" start="00:00:20.600" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""because it has many, many options""" start="00:00:23.360" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""and major and minor modes""" start="00:00:26.320" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""that interact in different ways with each other.""" start="00:00:27.680" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""And it also doesn't help that Gnus started originally""" start="00:00:30.680" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""as a newsreader""" start="00:00:35.320" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""rather than a mail client.""" start="00:00:36.360" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""So a lot of the terminology that it uses""" start="00:00:38.760" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""is also rooted in that,""" start="00:00:40.880" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""in reading and writing news.""" start="00:00:42.520" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""But nevertheless, with this video and talk,""" start="00:00:45.560" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""I hope to provide a sort""" start="00:00:48.120" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""of very quick introduction""" start="00:00:52.160" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""of starting to use Gnus""" start="00:00:55.760" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""to read and write email and send it.""" start="00:00:57.540" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""We will use Gnus' IMAP support,""" start="00:01:00.920" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""mainly because a lot of people""" start="00:01:02.680" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""these days have email accounts""" start="00:01:06.120" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""with mail service providers""" start="00:01:08.680" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""that support IMAP,""" start="00:01:10.760" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""which is an open standard.""" start="00:01:12.040" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""So it's widely available and supported""" start="00:01:14.320" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""across many different providers""" start="00:01:17.480" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""as well as mail clients or mail user agents as well.""" start="00:01:19.720" video="mainVideo-gnus" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Demo""" start="00:01:25.240" video="mainVideo-gnus" id="subtitle"]]</div>[[!template text="""Okay, so let's just jump straight right in.""" start="00:01:25.240" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""I will enter this demo directory that I created""" start="00:01:30.560" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""for the purposes of this demonstration""" start="00:01:34.280" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""and change my home directory to this one""" start="00:01:36.920" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""so that we can safely experiment with Gnus here.""" start="00:01:41.000" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""For this presentation, I've written up""" start="00:01:49.840" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""a quick initialization file or init file""" start="00:01:53.980" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""that I will share afterwards as well""" start="00:01:56.840" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""to get us going with Gnus.""" start="00:01:59.720" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""There's not much to it at the moment.""" start="00:02:01.640" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""Just set up the package archives and""" start="00:02:04.520" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""install the keycast package""" start="00:02:07.400" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""for showing the key presses in the mode line.""" start="00:02:09.480" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""Yeah, that's about it.""" start="00:02:14.080" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""And I'll also define""" start="00:02:15.360" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""a little like inline function +emacs.d""" start="00:02:16.240" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""that allows me to conveniently write""" start="00:02:20.280" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""and have it expanded""" start="00:02:24.080" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""or refer to files and directories, rather,""" start="00:02:26.640" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""paths that we could expand,""" start="00:02:29.301" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""inside my Emacs configuration directory.""" start="00:02:30.901" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""I also have this eval-last-sexp""" start="00:02:32.834" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""bound to a global key,""" start="00:02:37.501" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""so that I will be able to easily""" start="00:02:41.120" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""use it for this talk.""" start="00:02:43.280" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""Okay, let's jump right in.""" start="00:02:47.520" video="mainVideo-gnus" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Don't panic""" start="00:02:49.960" video="mainVideo-gnus" id="subtitle"]]</div>[[!template text="""First things first, don't panic.""" start="00:02:49.960" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""And that's actually also the name""" start="00:02:52.240" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""of the very first node""" start="00:02:55.268" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""in the Gnus manual when you open it.""" start="00:02:58.360" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""And it's actually nice.""" start="00:03:01.560" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""I definitely, definitely recommend""" start="00:03:02.840" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""that you look through""" start="00:03:04.480" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""at least the very first couple of chapters of this,""" start="00:03:07.080" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""skim through it, and later on refer to it""" start="00:03:10.200" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""whenever you find something confusing""" start="00:03:14.200" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""or don't understand it.""" start="00:03:16.134" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""But yeah, we'll start""" start="00:03:19.500" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""with these two paragraphs here.""" start="00:03:21.360" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""So again, a Gnus installation""" start="00:03:22.400" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""is basically just a list of one or more servers""" start="00:03:23.640" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""and the subscribed groups from those servers""" start="00:03:28.120" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""and articles in those groups.""" start="00:03:30.120" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""You can already kind of see""" start="00:03:32.320" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""where that influence of a newsreader comes in.""" start="00:03:34.280" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""But yeah, basically what it's saying is that,""" start="00:03:39.480" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""you know, we have one or more servers.""" start="00:03:41.840" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""We can think of them as email servers.""" start="00:03:43.840" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""Groups can be like, we can think""" start="00:03:47.080" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""of them as folders or directories.""" start="00:03:49.360" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""And yeah, articles,""" start="00:03:52.960" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""those would be like our email messages.""" start="00:03:55.240" video="mainVideo-gnus" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Configuring servers""" start="00:03:58.560" video="mainVideo-gnus" id="subtitle"]]</div>[[!template text="""With Gnus, we can add""" start="00:03:58.560" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""and configure servers mainly using two variables.""" start="00:03:59.680" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""One of them is the gnus-select-method""" start="00:04:06.120" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""and the other is gnus-secondary-select-methods.""" start="00:04:07.920" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""The first one predates the second one""" start="00:04:11.480" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""and I generally don't recommend using it, because""" start="00:04:15.760" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""first of all, it can only point""" start="00:04:17.560" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""to one server, and that server,""" start="00:04:22.560" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""because it's the primary,""" start="00:04:26.360" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""then Gnus won't add a prefix to its groups,""" start="00:04:27.880" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""so later on, as you get into""" start="00:04:32.560" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""more advanced features of Gnus""" start="00:04:34.840" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""and, for example, want to write rules""" start="00:04:36.680" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""to modify your message composition""" start="00:04:38.520" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""in a way for certain groups, or file mail,""" start="00:04:42.960" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""automatically classify mail,""" start="00:04:47.040" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""this distinction can become""" start="00:04:48.800" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""confusing and annoying.""" start="00:04:51.880" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""My recommendation is to always and only use""" start="00:04:53.960" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""the gnus-secondary-select-methods.""" start="00:04:57.200" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""Yeah, so let's do that here.""" start="00:05:01.800" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""I'm gonna uncomment this portion.""" start="00:05:07.320" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""So here, I set the primary select method to nil,""" start="00:05:10.300" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""and the second one, I define an nnimap server""" start="00:05:16.420" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""of the nnimap backend.""" start="00:05:24.160" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""I give it the name ec25gnus.""" start="00:05:30.040" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""What I want it to do is to""" start="00:05:32.440" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""connect to my mail server,""" start="00:05:35.880" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""which is at this address,""" start="00:05:37.800" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""and fetch emails from it over TLS with this username.""" start="00:05:41.080" video="mainVideo-gnus" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text=""".authinfo""" start="00:05:46.240" video="mainVideo-gnus" id="subtitle"]]</div>[[!template text="""And then the passwords or the credentials,""" start="00:05:46.240" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""you can put them in the .authinfo file.""" start="00:05:50.720" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""Normally, you would want to, for example,""" start="00:05:56.840" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""encrypt this file with your GPG key.""" start="00:05:58.800" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""But for this demonstration, I haven't.""" start="00:06:03.720" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""So yeah, the format is the keyword "machine"""" start="00:06:06.720" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""followed by the name of your Gnus server or account,""" start="00:06:10.480" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""followed by the word "login",""" start="00:06:15.240" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""then your login username,""" start="00:06:17.200" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""and then the password, which here it's not shown.""" start="00:06:19.200" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""Yeah.""" start="00:06:23.960" video="mainVideo-gnus" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Configuration""" start="00:06:26.600" video="mainVideo-gnus" id="subtitle"]]</div>[[!template text="""But before we actually set this,""" start="00:06:26.600" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""I'll just show you that if we like start Gnus""" start="00:06:28.680" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""with M-x gnus,""" start="00:06:31.480" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""initially, it will just show""" start="00:06:33.720" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""an error like this.""" start="00:06:36.440" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""Even if we continue, it's empty.""" start="00:06:37.760" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""There's not much because Gnus doesn't know""" start="00:06:40.400" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""where to fetch these emails from.""" start="00:06:43.400" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""And that's what we will configure.""" start="00:06:47.040" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""Excuse me.""" start="00:06:52.160" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""Yeah, so just for convenience,""" start="00:06:55.860" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""we can bind Gnus to,""" start="00:06:57.560" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""for example, C-c g, as I've done here.""" start="00:06:59.080" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""You will want to set your name""" start="00:07:00.680" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""and email address, like so.""" start="00:07:04.120" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""Here we tell Emacs""" start="00:07:05.800" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""that we are going to be using Gnus for reading email,""" start="00:07:09.240" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""because Emacs comes""" start="00:07:11.440" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""with other email clients as well,""" start="00:07:12.840" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""such as Rmail, and in fact, defaults to Rmail,""" start="00:07:14.760" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""so this way, we tell it to use Gnus.""" start="00:07:18.560" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""By default, Gnus puts its newsrc file and other files,""" start="00:07:24.840" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""I believe it still scatters them""" start="00:07:31.560" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""in a few different directories""" start="00:07:34.320" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""in your home directory,""" start="00:07:35.440" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""so it's a little bit messy.""" start="00:07:36.280" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""So what I prefer to do is to just put it""" start="00:07:37.400" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""all under the Gnus directory""" start="00:07:40.040" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""inside of my Emacs configuration, as I do here.""" start="00:07:42.440" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""Yeah, and then here we just tell Gnus""" start="00:07:47.440" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""to, like, don't try to bother""" start="00:07:50.640" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""with a generic newsrc file""" start="00:07:53.320" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""that would be shared""" start="00:07:55.760" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""with other news readers.""" start="00:07:57.120" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""Just want to use it for email.""" start="00:07:58.400" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""And yeah, so we just tell Gnus""" start="00:07:59.680" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""to keep all of its data""" start="00:08:01.960" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""inside a dedicated .newsrc.eld""" start="00:08:03.040" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""(for Emacs Lisp data) file instead.""" start="00:08:08.080" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""And we can also have Gnus not prompt us""" start="00:08:12.160" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""when we want to exit with q.""" start="00:08:15.200" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""Anyway, so let's go ahead and evaluate this.""" start="00:08:19.680" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""So this has been set,""" start="00:08:23.400" video="mainVideo-gnus" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Starting Gnus""" start="00:08:25.720" video="mainVideo-gnus" id="subtitle"]]</div>[[!template text="""so if we type M-x gnus again, or hit C-c g,""" start="00:08:25.720" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""now we're faced with an empty buffer,""" start="00:08:32.268" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""and it says no news is good news,""" start="00:08:35.700" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""and that's actually""" start="00:08:37.400" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""one of the characteristics of Gnus""" start="00:08:38.400" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""is that by default it tries""" start="00:08:40.720" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""to like sort of declutter""" start="00:08:44.780" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""and show us a little less possible""" start="00:08:47.620" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""in the group buffer,""" start="00:08:49.200" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""meaning that if you don't have""" start="00:08:50.820" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""any groups with unread or marked""" start="00:08:53.260" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""or, like, starred messages, it will not show them.""" start="00:08:55.640" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""To actually see all of our groups or folders,""" start="00:09:00.120" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""we hit shift L or capital L,""" start="00:09:03.960" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""and we see that we have an inbox here,""" start="00:09:08.360" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""as expected. So we enter the inbox,""" start="00:09:12.420" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""and we see that there is an article there""" start="00:09:14.880" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""and it's already been marked as read.""" start="00:09:17.460" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""But if we mark it as unread""" start="00:09:20.780" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""and exit and enter Gnus again,""" start="00:09:22.680" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""this is what we would see.""" start="00:09:25.960" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""We would see that our group""" start="00:09:27.280" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""and then we enter it, we see our mail here.""" start="00:09:28.840" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""Yeah, and this is our very first email""" start="00:09:34.100" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""that we read in GNU Emacs here, inside Gnus.""" start="00:09:36.160" video="mainVideo-gnus" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Always showing groups""" start="00:09:40.080" video="mainVideo-gnus" id="subtitle"]]</div>[[!template text="""It might be useful to have Gnus always show""" start="00:09:40.080" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""certain groups or folders""" start="00:09:43.840" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""even if they don't have""" start="00:09:46.840" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""anything unread or marked inside of them.""" start="00:09:48.320" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""The way we can do that is""" start="00:09:52.340" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""by setting this variable""" start="00:09:56.040" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""gnus-permanently-visible-groups""" start="00:09:57.600" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""to a regular expression""" start="00:10:01.340" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""that describes the name of these groups.""" start="00:10:03.040" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""So if we launch Gnus again,""" start="00:10:09.120" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""this time, we see that that group is visible,""" start="00:10:11.540" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""even though there's no unread messages in it.""" start="00:10:14.760" video="mainVideo-gnus" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Reading messages""" start="00:10:19.900" video="mainVideo-gnus" id="subtitle"]]</div>[[!template text="""When we enter a group or folder,""" start="00:10:19.900" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""we will see a list of all of our messages.""" start="00:10:24.400" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""Here, we only have one.""" start="00:10:26.720" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""We can press M-u or Alt-u""" start="00:10:27.800" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""to mark something as unread.""" start="00:10:31.940" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""You can press d to mark it as read.""" start="00:10:34.680" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""If you press just u,""" start="00:10:38.540" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""it'll tick the article,""" start="00:10:40.080" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""which is kind of the equivalent""" start="00:10:41.960" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""of marking the message or email""" start="00:10:44.040" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""as starred in other email clients""" start="00:10:47.000" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""such as Thunderbird.""" start="00:10:50.540" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""We see that when there are groups""" start="00:10:55.720" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""that have starred or ticked messages""" start="00:11:00.640" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""inside of them,""" start="00:11:03.960" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""Gnus will mark them""" start="00:11:04.680" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""with this little star here, or asterisk.""" start="00:11:05.600" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""This talk is just barely""" start="00:11:16.020" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""scratching the surface.""" start="00:11:17.640" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""Let's see how far...""" start="00:11:19.040" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""How am I doing with the time?""" start="00:11:21.081" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""Okay, 11 minutes already.""" start="00:11:22.760" video="mainVideo-gnus" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Debugging IMAP""" start="00:11:30.120" video="mainVideo-gnus" id="subtitle"]]</div>[[!template text="""Just a couple of helpful things here,""" start="00:11:30.120" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""like this nnimap-record-commands variable.""" start="00:11:32.080" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""It's useful when you want to debug""" start="00:11:36.920" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""your IMAP setup with Gnus.""" start="00:11:38.520" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""If you set it to anything non-nil,""" start="00:11:40.120" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""it will log the commands that it runs""" start="00:11:42.860" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""to a special `\*imap log\*` buffer.""" start="00:11:46.700" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""And here I just set it""" start="00:11:49.540" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""to this init-file-debug variable,""" start="00:11:50.720" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""which is set to non-nil""" start="00:11:52.680" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""whenever you launch Emacs""" start="00:11:55.160" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""with the --debug-init switch,""" start="00:11:56.440" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""so that's pretty helpful.""" start="00:11:59.280" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""You want to also set your sent folder,""" start="00:12:02.240" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""basically, where Gnus will save""" start="00:12:05.120" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""a copy of the message that you just sent.""" start="00:12:07.480" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""Normally, I think the convention these days is,""" start="00:12:09.440" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""a lot of you know servers and clients""" start="00:12:12.800" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""use a dedicated sent folder,""" start="00:12:16.600" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""but with Gnus, I just prefer to use INBOX itself.""" start="00:12:18.800" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""Mainly because then I will have""" start="00:12:24.340" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""threading working for free,""" start="00:12:27.120" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""so I can read the entire thread""" start="00:12:28.760" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""of an email chain there in one place.""" start="00:12:31.940" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""Of course, we don't have to keep""" start="00:12:34.300" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""the messages in there forever.""" start="00:12:35.320" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""And in fact, Gnus has facilities,""" start="00:12:38.900" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""both manual and automated,""" start="00:12:42.080" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""for expiring emails into""" start="00:12:43.480" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""different locations or different folders.""" start="00:12:46.000" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""Yeah. So let's move on here.""" start="00:12:52.680" video="mainVideo-gnus" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Topics""" start="00:12:55.160" video="mainVideo-gnus" id="subtitle"]]</div>[[!template text="""Topics are another nice feature of Gnus.""" start="00:12:55.160" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""So this is useful""" start="00:13:02.040" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""for creating some topics""" start="00:13:03.280" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""and then classifying or grouping""" start="00:13:05.360" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""your directories there.""" start="00:13:08.460" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""So we will see the use""" start="00:13:10.600" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""of this in a moment,""" start="00:13:11.800" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""where, let's say, I want to add""" start="00:13:13.640" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""a second account to Gnus.""" start="00:13:17.020" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""This one I'm going to call ec25work.""" start="00:13:20.000" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""Let's pretend that""" start="00:13:23.560" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""this is my work email.""" start="00:13:24.680" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""So if we open Gnus now,""" start="00:13:29.860" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""we see that our work INBOX""" start="00:13:32.480" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""also shows up here.""" start="00:13:37.000" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""And because we enabled topic mode,""" start="00:13:37.960" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""we see that we have""" start="00:13:41.300" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""these sort of buttons""" start="00:13:42.360" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""like Gnus and misc here.""" start="00:13:43.440" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""And we can, I believe,""" start="00:13:44.840" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""create a topic with capital T n.""" start="00:13:46.680" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""We can call it personal, this one.""" start="00:13:49.800" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""Let's create another one, work.""" start="00:13:52.880" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""And then what we can do is go""" start="00:13:56.940" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""over the directory that we want,""" start="00:13:59.580" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""for example, this one,""" start="00:14:02.800" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""hit capital T m to move it""" start="00:14:04.760" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""to the personal topic,""" start="00:14:08.220" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""and this work one,""" start="00:14:11.900" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""move it to the work topic.""" start="00:14:13.080" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""So we can nicely classify""" start="00:14:15.200" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""and group our groups folders here,""" start="00:14:17.440" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""which is especially useful""" start="00:14:23.120" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""when you have hundreds of them.""" start="00:14:24.720" video="mainVideo-gnus" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Customizing message display""" start="00:14:25.560" video="mainVideo-gnus" id="subtitle"]]</div>[[!template text="""Anyhow, we can customize""" start="00:14:25.560" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""different aspects of message display.""" start="00:14:29.760" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""Like for example,""" start="00:14:35.040" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""we can this way customize""" start="00:14:35.840" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""and change the order of""" start="00:14:38.200" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""which headers we want to see and where.""" start="00:14:39.200" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""So if I launch Gnus""" start="00:14:41.600" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""and go back to this email here,""" start="00:14:45.200" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""these are the headers that we see at the top.""" start="00:14:48.460" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""Excuse me.""" start="00:14:52.140" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""And with Gnus we can always""" start="00:14:52.640" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""We can have it show all the headers""" start="00:14:55.160" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""by pressing t to toggle the headers.""" start="00:14:57.800" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""Here we can see all the nitty-gritty""" start="00:15:02.000" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""and all of the headers in the message""" start="00:15:04.580" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""and we can toggle it back with t again.""" start="00:15:06.360" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""We can modify and customize the sorting""" start="00:15:12.220" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""with dedicated sorting functions.""" start="00:15:16.480" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""It comes with a number of them""" start="00:15:20.020" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""out of the box""" start="00:15:21.000" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""but we can define them as well.""" start="00:15:21.600" video="mainVideo-gnus" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Sending emails""" start="00:15:24.320" video="mainVideo-gnus" id="subtitle"]]</div>[[!template text="""Now to send emails. Let's see.""" start="00:15:24.320" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""We will be using message,""" start="00:15:29.760" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""and that's what Gnus itself uses.""" start="00:15:31.000" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""So I will set things up here.""" start="00:15:34.940" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""Let's see.""" start="00:15:38.580" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""Okay, so first of all,""" start="00:15:42.640" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""we want to have Gnus mark""" start="00:15:44.520" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""the messages that we write to others""" start="00:15:46.440" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""as read automatically,""" start="00:15:48.520" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""so this option does that.""" start="00:15:49.760" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""And then we define posting styles this way""" start="00:15:51.360" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""using the prefix, the name""" start="00:15:58.040" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""of the IMAP server.""" start="00:16:01.620" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""And this is how we can tell it to use""" start="00:16:04.360" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""what email address for the From [header]""" start="00:16:06.520" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""and which SMTP server to send it with.""" start="00:16:09.200" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""Yeah, and then gcc is where Gnus will save""" start="00:16:14.600" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""the copy of the messages that we write.""" start="00:16:17.880" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""So if we go ahead and launch Gnus again.""" start="00:16:20.200" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""We can go into our personal email here,""" start="00:16:24.140" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""hit m to compose a new message.""" start="00:16:26.280" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""We can prepare an email to,""" start="00:16:28.920" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""let's say, our work address.""" start="00:16:33.560" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""Hello from EmacsConf 2025 Gnus talk.""" start="00:16:35.120" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""Hello, this is just a test. :)""" start="00:16:42.420" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""Yeah, and we hit send.""" start="00:16:47.640" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""The sending will be done""" start="00:16:55.740" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""using Emacs's built-in SMTP libraries.""" start="00:16:56.920" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""Sometimes it can take a moment.""" start="00:17:03.480" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""Okay, that's it. It's done.""" start="00:17:05.120" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""So if we go back out""" start="00:17:07.600" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""and if we hit g to get new news,""" start="00:17:09.260" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""we should be able to see our new email there""" start="00:17:11.560" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""in the other account that we just sent it to.""" start="00:17:15.680" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""So we can come here, open it,""" start="00:17:17.640" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""and there we go.""" start="00:17:22.361" video="mainVideo-gnus" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Plans""" start="00:17:26.660" video="mainVideo-gnus" id="subtitle"]]</div>[[!template text="""There is a lot to configure in Gnus,""" start="00:17:26.660" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""and we're just barely scratching the surface,""" start="00:17:29.240" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""and unfortunately I don't have the time""" start="00:17:31.440" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""to explain all of these""" start="00:17:34.080" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""but I do plan on doing""" start="00:17:35.000" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""a much longer running series,""" start="00:17:36.520" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""whether it's text or videos,""" start="00:17:38.840" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""showing how to configure""" start="00:17:41.500" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""and use a lot of these different aspects of Gnus.""" start="00:17:42.880" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""But yeah, here, near the end, just a couple of...""" start="00:17:45.320" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""quick things. I find it's nice to have message""" start="00:17:49.520" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""prompt us for [confirmation]""" start="00:17:54.920" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""that we do want to send a message.""" start="00:17:56.520" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""Actually, when it does that, I take""" start="00:17:59.200" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""another look over my email""" start="00:18:01.360" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""to make sure I don't have any typos.""" start="00:18:02.600" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""It's generally a good idea to wrap your messages""" start="00:18:07.060" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""around 70 or 72 characters.""" start="00:18:09.520" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""We do that here.""" start="00:18:14.120" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""We can tell Gnus to forward messages""" start="00:18:16.620" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""as a proper MIME part,""" start="00:18:19.160" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""instead of some half-broken way.""" start="00:18:22.600" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""This customization, the sendmail function,""" start="00:18:27.060" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""is how we tell Gnus with message""" start="00:18:30.120" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""to use the SMTP library to sending the email,""" start="00:18:34.240" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""and these two variables are useful for""" start="00:18:38.240" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""omitting our own email address""" start="00:18:42.480" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""when we want to send someone,""" start="00:18:45.960" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""like when we hit r, to reply to someone.""" start="00:18:47.440" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""if we configure these variables,""" start="00:18:50.180" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""then Gnus won't add""" start="00:18:51.960" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""our own address to the To or Cc,""" start="00:18:52.960" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""which is pretty useful.""" start="00:18:56.060" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""I also find it helpful""" start="00:18:58.480" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""to unbind C-c C-s.""" start="00:18:59.920" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""That's another key""" start="00:19:03.360" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""for sending the message [in addition to C-c C-c].""" start="00:19:04.975" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""And because C-c C-d,""" start="00:19:06.320" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""which is very close to it on the QWERTY layout,""" start="00:19:09.720" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""is useful for saving a draft""" start="00:19:13.360" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""and then coming back to it,""" start="00:19:15.720" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""I don't want to accidentally hit C-c C-s,""" start="00:19:16.840" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""and send the message prematurely.""" start="00:19:20.080" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""So I unbind it.""" start="00:19:22.040" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""Yeah, anyway, that's about it.""" start="00:19:25.980" video="mainVideo-gnus" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Wrapping up""" start="00:19:27.960" video="mainVideo-gnus" id="subtitle"]]</div>[[!template text="""That's a kind of very quick tour""" start="00:19:27.960" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""and introduction of setting up Gnus.""" start="00:19:31.040" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""Here, we just configured a remote IMAP server,""" start="00:19:37.120" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""but we can also, of course,""" start="00:19:40.720" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""set up a local IMAP server such as Dovecot""" start="00:19:43.520" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""and point Gnus to there,""" start="00:19:46.360" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""and use programs like OfflineIMAP, I believe,""" start="00:19:48.400" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""or the mbsync program from isync package""" start="00:19:52.800" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""or isync project to synchronize our messages""" start="00:19:57.480" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""to local mail directories""" start="00:20:02.940" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""and then point Gnus to it.""" start="00:20:04.480" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""The reason we might want to use that""" start="00:20:06.280" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""is to always have a copy of our messages at hand""" start="00:20:08.360" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""so we can use offline.""" start="00:20:11.720" video="mainVideo-gnus" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""nnimap""" start="00:20:12.760" video="mainVideo-gnus" id="subtitle"]]</div>[[!template text="""And why use nnimap specifically?""" start="00:20:12.760" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""As of now, the Maildir backend included with Gnus""" start="00:20:17.440" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""is very inefficient,""" start="00:20:27.400" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""especially when dealing with""" start="00:20:29.680" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""tens or hundreds of thousands of messages""" start="00:20:31.400" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""like some of us are.""" start="00:20:33.840" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""It just takes an eternity to try""" start="00:20:36.660" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""and index them and get going.""" start="00:20:38.760" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""In that case, what I recommend doing""" start="00:20:43.260" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""is instead of interfacing directly with Maildir,""" start="00:20:44.640" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""for Gnus, just install and run""" start="00:20:47.800" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""Dovecot, a local IMAP server,""" start="00:20:52.360" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""and point Gnus to that.""" start="00:20:54.360" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""I plan on writing tutorials or doing videos""" start="00:20:59.820" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""about these other aspects""" start="00:21:02.960" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""of configuring Gnus after the conference.""" start="00:21:06.640" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""That's about it for me,""" start="00:21:10.520" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""so I hope you find this helpful.""" start="00:21:11.440" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""If you have any questions,""" start="00:21:14.120" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""please feel free to email me""" start="00:21:16.680" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""at bandali@gnu.org or @kelar.org.""" start="00:21:18.240" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""You can take a look at my personal website""" start="00:21:23.760" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""where I plan on posting""" start="00:21:25.880" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""other Emacs and Gnus materials.""" start="00:21:26.840" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""And yeah, thank you for watching""" start="00:21:31.060" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""and I hope you enjoy the rest of the conference.""" start="00:21:33.040" video="mainVideo-gnus" id="subtitle"]] +[[!template text="""Take care.""" start="00:21:35.160" video="mainVideo-gnus" id="subtitle"]] + +</div> + +Captioner: sachac + Questions or comments? Please e-mail [bandali@gnu.org](mailto:bandali@gnu.org?subject=Comment%20for%20EmacsConf%202023%20gnus%3A%20Reading%20and%20writing%20emails%20in%20GNU%20Emacs%20with%20Gnus) diff --git a/2025/info/gnus-before.md b/2025/info/gnus-before.md index 1267f806..90c91a11 100644 --- a/2025/info/gnus-before.md +++ b/2025/info/gnus-before.md @@ -8,12 +8,30 @@ The following image shows where the talk is in the schedule for Sat 2025-12-06. Format: 22-min talk ; Q&A: BigBlueButton conference room <https://media.emacsconf.org/2025/current/bbb-gnus.html> Etherpad: <https://pad.emacsconf.org/2025-gnus> Etherpad: <https://pad.emacsconf.org/2025-gnus> Discuss on IRC: [#emacsconf-gen](https://chat.emacsconf.org/?join=emacsconf,emacsconf-gen) -Status: Ready to stream +Status: Now playing on the conference livestream <div>Times in different time zones:</div><div class="times" start="2025-12-06T15:50:00Z" end="2025-12-06T16:15:00Z"><div class="conf-time">Saturday, Dec 6 2025, ~10:50 AM - 11:15 AM EST (US/Eastern)</div><div class="others"><div>which is the same as:</div>Saturday, Dec 6 2025, ~9:50 AM - 10:15 AM CST (US/Central)<br />Saturday, Dec 6 2025, ~8:50 AM - 9:15 AM MST (US/Mountain)<br />Saturday, Dec 6 2025, ~7:50 AM - 8:15 AM PST (US/Pacific)<br />Saturday, Dec 6 2025, ~3:50 PM - 4:15 PM UTC <br />Saturday, Dec 6 2025, ~4:50 PM - 5:15 PM CET (Europe/Paris)<br />Saturday, Dec 6 2025, ~5:50 PM - 6:15 PM EET (Europe/Athens)<br />Saturday, Dec 6 2025, ~9:20 PM - 9:45 PM IST (Asia/Kolkata)<br />Saturday, Dec 6 2025, ~11:50 PM - 12:15 AM +08 (Asia/Singapore)<br />Sunday, Dec 7 2025, ~12:50 AM - 1:15 AM JST (Asia/Tokyo)</div></div><div><strong><a href="/2025/watch/gen/">Find out how to watch and participate</a></strong></div> +<div class="vid mainVideo"><video controls preload="none" id="mainVideo-gnus"><source src="https://media.emacsconf.org/2025/emacsconf-2025-gnus--reading-and-writing-emails-in-gnu-emacs-with-gnus--amin-bandali--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2025/captions/emacsconf-2025-gnus--reading-and-writing-emails-in-gnu-emacs-with-gnus--amin-bandali--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2025/captions/emacsconf-2025-gnus--reading-and-writing-emails-in-gnu-emacs-with-gnus--amin-bandali--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="mainVideo-gnus" data=""" +00:02.620 Introduction +01:25.240 Demo +02:49.960 Don't panic +03:58.560 Configuring servers +05:46.240 .authinfo +06:26.600 Configuration +08:25.720 Starting Gnus +09:40.080 Always showing groups +10:19.900 Reading messages +11:30.120 Debugging IMAP +12:55.160 Topics +14:25.560 Customizing message display +15:24.320 Sending emails +17:26.660 Plans +19:27.960 Wrapping up +20:12.760 nnimap +"""]]<div></div>Duration: 21:37 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2025-gnus">Open Etherpad</a></li><li><a href="https://media.emacsconf.org/2025/current/bbb-gnus.html">Open public Q&A</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-gnus--reading-and-writing-emails-in-gnu-emacs-with-gnus--amin-bandali--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-gnus--reading-and-writing-emails-in-gnu-emacs-with-gnus--amin-bandali--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-gnus--reading-and-writing-emails-in-gnu-emacs-with-gnus--amin-bandali--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-gnus--reading-and-writing-emails-in-gnu-emacs-with-gnus--amin-bandali--main.opus">Download --main.opus (19MB)</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-gnus--reading-and-writing-emails-in-gnu-emacs-with-gnus--amin-bandali--main.png">Download --main.png</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-gnus--reading-and-writing-emails-in-gnu-emacs-with-gnus--amin-bandali--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-gnus--reading-and-writing-emails-in-gnu-emacs-with-gnus--amin-bandali--main.webm">Download --main.webm (60MB)</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-gnus--reading-and-writing-emails-in-gnu-emacs-with-gnus--amin-bandali--split.txt">Download --split.txt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-gnus--reading-and-writing-emails-in-gnu-emacs-with-gnus--amin-bandali--split.vtt">Download --split.vtt</a></li><li><a href="https://youtu.be/0Pu8oqdsSig">View on Youtube</a></li></ul></div></div> # Description <!-- End of emacsconf-publish-before-page -->
\ No newline at end of file |
