diff options
Diffstat (limited to '')
4 files changed, 734 insertions, 3 deletions
diff --git a/2022/captions/emacsconf-2022-detached--getting-detached-from-emacs--niklas-eklund--main--chapters.vtt b/2022/captions/emacsconf-2022-detached--getting-detached-from-emacs--niklas-eklund--main--chapters.vtt new file mode 100644 index 00000000..63f883ff --- /dev/null +++ b/2022/captions/emacsconf-2022-detached--getting-detached-from-emacs--niklas-eklund--main--chapters.vtt @@ -0,0 +1,34 @@ +WEBVTT + +00:00:00.000 --> 00:00:27.120 +Intro + +00:00:27.120 --> 00:01:15.800 +The problem + +00:01:15.800 --> 00:02:30.840 +My solution: detached + +00:02:30.840 --> 00:03:30.800 +Shell + +00:03:30.800 --> 00:04:27.754 +Compile + +00:04:27.854 --> 00:05:21.440 +Detached list sessions + +00:05:21.440 --> 00:06:07.080 +Narrow criteria + +00:06:07.080 --> 00:06:34.040 +Diff sessions + +00:06:34.040 --> 00:07:04.421 +Rich interface with properties + +00:07:04.521 --> 00:07:44.988 +Annotation + +00:07:45.088 --> 00:10:10.760 +Searching through sessions diff --git a/2022/captions/emacsconf-2022-detached--getting-detached-from-emacs--niklas-eklund--main.vtt b/2022/captions/emacsconf-2022-detached--getting-detached-from-emacs--niklas-eklund--main.vtt new file mode 100644 index 00000000..09c4a9df --- /dev/null +++ b/2022/captions/emacsconf-2022-detached--getting-detached-from-emacs--niklas-eklund--main.vtt @@ -0,0 +1,502 @@ +WEBVTT captioned by anush + +00:00:00.000 --> 00:00:04.354 +Hello, everyone! Welcome to my talk, + +00:00:04.454 --> 00:00:07.221 +"Getting detached from Emacs". + +00:00:07.321 --> 00:00:09.720 +When I started to use Emacs, + +00:00:09.720 --> 00:00:12.920 +I quickly gravitated towards using it + +00:00:12.920 --> 00:00:15.000 +as much as I could. + +00:00:15.000 --> 00:00:17.880 +Magit, Org, Dired, + +00:00:17.880 --> 00:00:21.360 +a lot of new possibilities opened up. + +00:00:21.360 --> 00:00:23.280 +However, there was a workflow + +00:00:23.280 --> 00:00:27.120 +that was difficult for me to replace. + +00:00:27.120 --> 00:00:30.120 +The problem for me was running shell commands + +00:00:30.120 --> 00:00:32.560 +in sub-processes of Emacs, + +00:00:32.560 --> 00:00:34.880 +which in some situations led me to stick to + +00:00:34.880 --> 00:00:38.000 +using an external terminal. + +00:00:38.000 --> 00:00:39.588 +These situations, + +00:00:39.688 --> 00:00:43.254 +often revolved around long-running shell commands, + +00:00:43.354 --> 00:00:46.054 +either on my local machine + +00:00:46.154 --> 00:00:48.600 +or on a remote host. + +00:00:48.600 --> 00:00:50.240 +When I was on a remote host, + +00:00:50.240 --> 00:00:52.800 +I would also rely on using the program tmux + +00:00:52.800 --> 00:00:57.280 +to be able to detach from the remote process. + +00:00:57.280 --> 00:00:59.521 +My main concern at the time + +00:00:59.621 --> 00:01:01.854 +was that I didn't want to having to avoid + +00:01:01.954 --> 00:01:03.440 +restarting Emacs, + +00:01:03.440 --> 00:01:07.800 +because I needed to wait for a process to complete. + +00:01:07.800 --> 00:01:11.200 +However, there was of course a lot of things + +00:01:11.200 --> 00:01:15.800 +I was missing out on by not using Emacs. + +00:01:15.800 --> 00:01:19.760 +Therefore, my solution to resolving + +00:01:19.760 --> 00:01:22.840 +the issue of occasionally having to leave Emacs + +00:01:22.840 --> 00:01:26.188 +led me down the path of developing the package + +00:01:26.188 --> 00:01:28.221 +Detached. + +00:01:28.321 --> 00:01:31.160 +The package allows Emacs to delegate + +00:01:31.160 --> 00:01:33.640 +the responsibility of creating processes + +00:01:33.640 --> 00:01:36.840 +to the program dtach. + +00:01:36.840 --> 00:01:39.021 +It also makes sure to write + +00:01:39.121 --> 00:01:44.321 +the output of the process to a file, + +00:01:44.421 --> 00:01:48.154 +which we will see later on how that is being used. + +00:01:48.254 --> 00:01:50.800 +The package makes Emacs capable of + +00:01:50.800 --> 00:01:53.120 +attaching to these processes + +00:01:53.120 --> 00:01:55.280 +as well as managing them. + +00:01:55.280 --> 00:01:58.880 +In the package, each process is called a session, + +00:01:58.880 --> 00:02:01.040 +and inside of Emacs that is just + +00:02:01.040 --> 00:02:02.560 +an object with properties + +00:02:02.560 --> 00:02:04.588 +such as what command is being run, + +00:02:04.688 --> 00:02:06.720 +what working directory is used, + +00:02:06.720 --> 00:02:10.240 +where the output is stored, etc. + +00:02:10.240 --> 00:02:12.480 +The important aspect is also that + +00:02:12.480 --> 00:02:16.840 +these objects are being persistent, + +00:02:16.840 --> 00:02:20.121 +so they are stored over time. + +00:02:20.221 --> 00:02:22.920 +Today, I'm going to walk you through + +00:02:22.920 --> 00:02:26.054 +how I use the package and what advantages + +00:02:26.154 --> 00:02:30.840 +there are of treating processes like text. + +00:02:30.840 --> 00:02:35.720 +I'm going to start by opening up M-x shell, + +00:02:35.720 --> 00:02:40.288 +and I will run a command + +00:02:40.388 --> 00:02:46.920 +to update my package manager. + +00:02:46.920 --> 00:02:48.254 +Instead of pressing return, + +00:02:48.354 --> 00:02:50.240 +I'll simply press shift return + +00:02:50.240 --> 00:02:52.600 +to let Emacs delegate the execution + +00:02:52.600 --> 00:02:54.920 +to the dtach program. + +00:02:54.920 --> 00:02:57.600 +Emacs will immediately attach itself to the process, + +00:02:57.600 --> 00:03:00.960 +and we therefore don't perceive any difference + +00:03:00.960 --> 00:03:04.480 +from when running the command as a subprocess. + +00:03:04.480 --> 00:03:06.488 +We now have the option though + +00:03:06.588 --> 00:03:09.800 +to detach from the session, + +00:03:09.800 --> 00:03:12.080 +and later on we can of course + +00:03:12.080 --> 00:03:17.054 +reattach Emacs to the session. + +00:03:17.154 --> 00:03:20.421 +For me, this addresses the core + +00:03:20.521 --> 00:03:23.800 +of the problem that I had. + +00:03:23.800 --> 00:03:25.040 +But let’s see what’s more + +00:03:25.040 --> 00:03:30.800 +the new workflow inside of Emacs can bring. + +00:03:30.800 --> 00:03:35.720 +The package supports multiple user interfaces + +00:03:35.720 --> 00:03:39.840 +such as Eshell and Compile. + +00:03:39.840 --> 00:03:43.360 +I will therefore switch to the Detached project, + +00:03:43.360 --> 00:03:49.440 +and I will run the build command that I use. + +00:03:49.440 --> 00:03:54.040 +I will run it with detached-compile + +00:03:54.040 --> 00:03:55.800 +with the difference that + +00:03:55.800 --> 00:03:59.800 +I can detach from the compilation. + +00:03:59.800 --> 00:04:05.000 +One benefit of this new workflow is that + +00:04:05.000 --> 00:04:08.680 +I can get a system notification shown up here + +00:04:08.680 --> 00:04:10.760 +once a session has finished. + +00:04:10.760 --> 00:04:15.520 +Previously, I was either forced to have + +00:04:15.520 --> 00:04:19.040 +the terminal open so I could see it or hiding it, + +00:04:19.040 --> 00:04:27.754 +but then risking having forgotten it. + +00:04:27.854 --> 00:04:32.560 +How do we then see the output of a session? + +00:04:32.560 --> 00:04:36.788 +Get the detached-list-sessions command, + +00:04:36.888 --> 00:04:42.854 +and here we see + +00:04:42.954 --> 00:04:45.600 +the command that we just built, + +00:04:45.600 --> 00:04:48.440 +and we see the guix pull with an asterisk + +00:04:48.440 --> 00:04:54.480 +indicating that it is continuously running. + +00:04:54.480 --> 00:05:01.421 +If I press enter, + +00:05:01.521 --> 00:05:04.440 +we will get the output of the session here. + +00:05:04.440 --> 00:05:07.200 +And since it was run using compile, + +00:05:07.200 --> 00:05:11.720 +we also have compilation mode enabled here, + +00:05:11.720 --> 00:05:14.188 +so we could navigate between + +00:05:14.288 --> 00:05:17.160 +potential warnings or errors. + +00:05:17.160 --> 00:05:21.440 +And we see that there is a warning here. + +00:05:21.440 --> 00:05:26.621 +One thing that + +00:05:26.721 --> 00:05:28.920 +I have prepared here is that + +00:05:28.920 --> 00:05:32.240 +if I open up the user interface, + +00:05:32.240 --> 00:05:35.760 +we only see two sessions, + +00:05:35.760 --> 00:05:38.988 +but that is because we applied a filter here. + +00:05:39.088 --> 00:05:43.160 +So, we have actually the only sessions + +00:05:43.160 --> 00:05:46.000 +that are created within the last 12 hours + +00:05:46.000 --> 00:05:47.360 +and that are considered unique. + +00:05:47.360 --> 00:05:50.600 +So, if I remove the uniqueness, + +00:05:50.600 --> 00:05:57.040 +we also see that we have a previous build + +00:05:57.040 --> 00:05:59.280 +running on the main branch. + +00:05:59.280 --> 00:06:02.760 +So, I think that's typically normal + +00:06:02.760 --> 00:06:07.080 +that you might have that. + +00:06:07.080 --> 00:06:10.920 +And since the sessions can be considered text, + +00:06:10.920 --> 00:06:14.760 +we can just mark these two and check, + +00:06:14.760 --> 00:06:18.880 +does this warning exist on the main branch or not? + +00:06:18.880 --> 00:06:22.720 +So, we can just diff these ones + +00:06:22.720 --> 00:06:27.454 +and we see that the warning is only present + +00:06:27.554 --> 00:06:34.040 +on the emacsconf branch. + +00:06:34.040 --> 00:06:37.520 +Now, another benefit, in my opinion, + +00:06:37.520 --> 00:06:41.840 +of the new way of working is that + +00:06:41.840 --> 00:06:43.240 +I have these properties being displayed + +00:06:43.240 --> 00:06:45.321 +in the user interface. + +00:06:45.421 --> 00:06:48.960 +I can quickly see which commands are still running, + +00:06:48.960 --> 00:06:51.360 +what hosts they are running on, + +00:06:51.360 --> 00:06:53.388 +where they are running, + +00:06:53.488 --> 00:06:58.121 +and for how long they have been running. + +00:06:58.221 --> 00:07:00.321 +And if they have run, + +00:07:00.421 --> 00:07:04.421 +how long did it take? + +00:07:04.521 --> 00:07:06.880 +Occasionally, though, there might be + +00:07:06.880 --> 00:07:16.880 +even more input needed to distinguish sessions. + +00:07:16.880 --> 00:07:19.600 +So, what I typically do then is + +00:07:19.600 --> 00:07:22.200 +press A to annotate the session, + +00:07:22.200 --> 00:07:28.988 +I would add a "Warning found at emacsconf" + +00:07:29.088 --> 00:07:32.854 +And then it will show up this annotation + +00:07:32.954 --> 00:07:44.988 +in the echo area when I select the session. + +00:07:45.088 --> 00:07:48.080 +Another great improvement of using these sessions + +00:07:48.080 --> 00:07:52.640 +and consider them being text is, + +00:07:52.640 --> 00:07:57.321 +now we also see the guix pull completed here. + +00:07:57.421 --> 00:08:00.921 +Then we can also select and see that, okay, + +00:08:01.021 --> 00:08:08.600 +there is a lot of updates in this command, + +00:08:08.600 --> 00:08:10.160 +but let's not look at it now. + +00:08:10.160 --> 00:08:17.554 +Let's instead remember that + +00:08:17.654 --> 00:08:19.840 +previously last week + +00:08:19.840 --> 00:08:21.640 +when I ran a guix pull, + +00:08:21.640 --> 00:08:27.680 +I saw an Emacs package that looks interesting. + +00:08:27.680 --> 00:08:30.040 +I rather don't remember its full name, + +00:08:30.040 --> 00:08:32.720 +but it has something to do with collection. + +00:08:32.720 --> 00:08:38.840 +So, what I then can do is + +00:08:38.840 --> 00:08:42.280 +remove the 12 hour narrowing criteria, + +00:08:42.280 --> 00:08:47.680 +and we can see here I got sessions ranging back + +00:08:47.680 --> 00:08:51.040 +even to 28th of October. + +00:08:51.040 --> 00:08:55.600 +Since these are just to be considered text, + +00:08:55.600 --> 00:08:58.654 +I can-- + +00:08:58.754 --> 00:09:00.320 +now let's first narrow the sessions + +00:09:00.320 --> 00:09:05.188 +to only show the ones that run guix pull. + +00:09:05.288 --> 00:09:08.440 +Then I would narrow based on the output + +00:09:08.440 --> 00:09:11.280 +containing a regular expression. + +00:09:11.280 --> 00:09:14.400 +So, I remember it was something with collection. + +00:09:14.400 --> 00:09:19.988 +And we got one hit. + +00:09:20.088 --> 00:09:24.088 +Here it should be something with collection. + +00:09:24.188 --> 00:09:29.521 +It was emacs-flymake-collection. + +00:09:29.621 --> 00:09:34.721 +This is something that is a + +00:09:34.821 --> 00:09:38.400 +very nice feature to have. + +00:09:38.400 --> 00:09:42.160 +It doesn't create any overhead + +00:09:42.160 --> 00:09:45.280 +of having these old sessions lying around + +00:09:45.280 --> 00:09:47.400 +and occasionally, it can be interesting + +00:09:47.400 --> 00:09:49.680 +to search through them as well. + +00:09:49.680 --> 00:09:55.000 +So, for me, this is another example of + +00:09:55.000 --> 00:09:59.954 +when bringing workflows into Emacs, + +00:10:00.054 --> 00:10:05.021 +it often opens up new exciting possibilities. + +00:10:05.121 --> 00:10:10.760 +Thanks a lot for listening. diff --git a/2022/info/detached-after.md b/2022/info/detached-after.md index 04ee65f7..44d7b677 100644 --- a/2022/info/detached-after.md +++ b/2022/info/detached-after.md @@ -1,6 +1,180 @@ <!-- Automatically generated by emacsconf-publish-after-page --> +<a name="detached-mainVideo-transcript"></a> +# Transcript + +[[!template new="1" text="""Hello, everyone! Welcome to my talk,""" start="00:00:00.000" video="mainVideo-detached" id="subtitle"]] +[[!template text=""""Getting detached from Emacs".""" start="00:00:04.454" video="mainVideo-detached" id="subtitle"]] +[[!template text="""When I started to use Emacs,""" start="00:00:07.321" video="mainVideo-detached" id="subtitle"]] +[[!template text="""I quickly gravitated towards using it""" start="00:00:09.720" video="mainVideo-detached" id="subtitle"]] +[[!template text="""as much as I could.""" start="00:00:12.920" video="mainVideo-detached" id="subtitle"]] +[[!template text="""Magit, Org, Dired,""" start="00:00:15.000" video="mainVideo-detached" id="subtitle"]] +[[!template text="""a lot of new possibilities opened up.""" start="00:00:17.880" video="mainVideo-detached" id="subtitle"]] +[[!template text="""However, there was a workflow""" start="00:00:21.360" video="mainVideo-detached" id="subtitle"]] +[[!template text="""that was difficult for me to replace.""" start="00:00:23.280" video="mainVideo-detached" id="subtitle"]] +[[!template new="1" text="""The problem for me was running shell commands""" start="00:00:27.120" video="mainVideo-detached" id="subtitle"]] +[[!template text="""in sub-processes of Emacs,""" start="00:00:30.120" video="mainVideo-detached" id="subtitle"]] +[[!template text="""which in some situations led me to stick to""" start="00:00:32.560" video="mainVideo-detached" id="subtitle"]] +[[!template text="""using an external terminal.""" start="00:00:34.880" video="mainVideo-detached" id="subtitle"]] +[[!template text="""These situations,""" start="00:00:38.000" video="mainVideo-detached" id="subtitle"]] +[[!template text="""often revolved around long-running shell commands,""" start="00:00:39.688" video="mainVideo-detached" id="subtitle"]] +[[!template text="""either on my local machine""" start="00:00:43.354" video="mainVideo-detached" id="subtitle"]] +[[!template text="""or on a remote host.""" start="00:00:46.154" video="mainVideo-detached" id="subtitle"]] +[[!template text="""When I was on a remote host,""" start="00:00:48.600" video="mainVideo-detached" id="subtitle"]] +[[!template text="""I would also rely on using the program tmux""" start="00:00:50.240" video="mainVideo-detached" id="subtitle"]] +[[!template text="""to be able to detach from the remote process.""" start="00:00:52.800" video="mainVideo-detached" id="subtitle"]] +[[!template text="""My main concern at the time""" start="00:00:57.280" video="mainVideo-detached" id="subtitle"]] +[[!template text="""was that I didn't want to having to avoid""" start="00:00:59.621" video="mainVideo-detached" id="subtitle"]] +[[!template text="""restarting Emacs,""" start="00:01:01.954" video="mainVideo-detached" id="subtitle"]] +[[!template text="""because I needed to wait for a process to complete.""" start="00:01:03.440" video="mainVideo-detached" id="subtitle"]] +[[!template text="""However, there was of course a lot of things""" start="00:01:07.800" video="mainVideo-detached" id="subtitle"]] +[[!template text="""I was missing out on by not using Emacs.""" start="00:01:11.200" video="mainVideo-detached" id="subtitle"]] +[[!template new="1" text="""Therefore, my solution to resolving""" start="00:01:15.800" video="mainVideo-detached" id="subtitle"]] +[[!template text="""the issue of occasionally having to leave Emacs""" start="00:01:19.760" video="mainVideo-detached" id="subtitle"]] +[[!template text="""led me down the path of developing the package""" start="00:01:22.840" video="mainVideo-detached" id="subtitle"]] +[[!template text="""Detached.""" start="00:01:26.188" video="mainVideo-detached" id="subtitle"]] +[[!template text="""The package allows Emacs to delegate""" start="00:01:28.321" video="mainVideo-detached" id="subtitle"]] +[[!template text="""the responsibility of creating processes""" start="00:01:31.160" video="mainVideo-detached" id="subtitle"]] +[[!template text="""to the program dtach.""" start="00:01:33.640" video="mainVideo-detached" id="subtitle"]] +[[!template text="""It also makes sure to write""" start="00:01:36.840" video="mainVideo-detached" id="subtitle"]] +[[!template text="""the output of the process to a file,""" start="00:01:39.121" video="mainVideo-detached" id="subtitle"]] +[[!template text="""which we will see later on how that is being used.""" start="00:01:44.421" video="mainVideo-detached" id="subtitle"]] +[[!template text="""The package makes Emacs capable of""" start="00:01:48.254" video="mainVideo-detached" id="subtitle"]] +[[!template text="""attaching to these processes""" start="00:01:50.800" video="mainVideo-detached" id="subtitle"]] +[[!template text="""as well as managing them.""" start="00:01:53.120" video="mainVideo-detached" id="subtitle"]] +[[!template text="""In the package, each process is called a session,""" start="00:01:55.280" video="mainVideo-detached" id="subtitle"]] +[[!template text="""and inside of Emacs that is just""" start="00:01:58.880" video="mainVideo-detached" id="subtitle"]] +[[!template text="""an object with properties""" start="00:02:01.040" video="mainVideo-detached" id="subtitle"]] +[[!template text="""such as what command is being run,""" start="00:02:02.560" video="mainVideo-detached" id="subtitle"]] +[[!template text="""what working directory is used,""" start="00:02:04.688" video="mainVideo-detached" id="subtitle"]] +[[!template text="""where the output is stored, etc.""" start="00:02:06.720" video="mainVideo-detached" id="subtitle"]] +[[!template text="""The important aspect is also that""" start="00:02:10.240" video="mainVideo-detached" id="subtitle"]] +[[!template text="""these objects are being persistent,""" start="00:02:12.480" video="mainVideo-detached" id="subtitle"]] +[[!template text="""so they are stored over time.""" start="00:02:16.840" video="mainVideo-detached" id="subtitle"]] +[[!template text="""Today, I'm going to walk you through""" start="00:02:20.221" video="mainVideo-detached" id="subtitle"]] +[[!template text="""how I use the package and what advantages""" start="00:02:22.920" video="mainVideo-detached" id="subtitle"]] +[[!template text="""there are of treating processes like text.""" start="00:02:26.154" video="mainVideo-detached" id="subtitle"]] +[[!template new="1" text="""I'm going to start by opening up M-x shell,""" start="00:02:30.840" video="mainVideo-detached" id="subtitle"]] +[[!template text="""and I will run a command""" start="00:02:35.720" video="mainVideo-detached" id="subtitle"]] +[[!template text="""to update my package manager.""" start="00:02:40.388" video="mainVideo-detached" id="subtitle"]] +[[!template text="""Instead of pressing return,""" start="00:02:46.920" video="mainVideo-detached" id="subtitle"]] +[[!template text="""I'll simply press shift return""" start="00:02:48.354" video="mainVideo-detached" id="subtitle"]] +[[!template text="""to let Emacs delegate the execution""" start="00:02:50.240" video="mainVideo-detached" id="subtitle"]] +[[!template text="""to the dtach program.""" start="00:02:52.600" video="mainVideo-detached" id="subtitle"]] +[[!template text="""Emacs will immediately attach itself to the process,""" start="00:02:54.920" video="mainVideo-detached" id="subtitle"]] +[[!template text="""and we therefore don't perceive any difference""" start="00:02:57.600" video="mainVideo-detached" id="subtitle"]] +[[!template text="""from when running the command as a subprocess.""" start="00:03:00.960" video="mainVideo-detached" id="subtitle"]] +[[!template text="""We now have the option though""" start="00:03:04.480" video="mainVideo-detached" id="subtitle"]] +[[!template text="""to detach from the session,""" start="00:03:06.588" video="mainVideo-detached" id="subtitle"]] +[[!template text="""and later on we can of course""" start="00:03:09.800" video="mainVideo-detached" id="subtitle"]] +[[!template text="""reattach Emacs to the session.""" start="00:03:12.080" video="mainVideo-detached" id="subtitle"]] +[[!template text="""For me, this addresses the core""" start="00:03:17.154" video="mainVideo-detached" id="subtitle"]] +[[!template text="""of the problem that I had.""" start="00:03:20.521" video="mainVideo-detached" id="subtitle"]] +[[!template text="""But let’s see what’s more""" start="00:03:23.800" video="mainVideo-detached" id="subtitle"]] +[[!template text="""the new workflow inside of Emacs can bring.""" start="00:03:25.040" video="mainVideo-detached" id="subtitle"]] +[[!template new="1" text="""The package supports multiple user interfaces""" start="00:03:30.800" video="mainVideo-detached" id="subtitle"]] +[[!template text="""such as Eshell and Compile.""" start="00:03:35.720" video="mainVideo-detached" id="subtitle"]] +[[!template text="""I will therefore switch to the Detached project,""" start="00:03:39.840" video="mainVideo-detached" id="subtitle"]] +[[!template text="""and I will run the build command that I use.""" start="00:03:43.360" video="mainVideo-detached" id="subtitle"]] +[[!template text="""I will run it with detached-compile""" start="00:03:49.440" video="mainVideo-detached" id="subtitle"]] +[[!template text="""with the difference that""" start="00:03:54.040" video="mainVideo-detached" id="subtitle"]] +[[!template text="""I can detach from the compilation.""" start="00:03:55.800" video="mainVideo-detached" id="subtitle"]] +[[!template text="""One benefit of this new workflow is that""" start="00:03:59.800" video="mainVideo-detached" id="subtitle"]] +[[!template text="""I can get a system notification shown up here""" start="00:04:05.000" video="mainVideo-detached" id="subtitle"]] +[[!template text="""once a session has finished.""" start="00:04:08.680" video="mainVideo-detached" id="subtitle"]] +[[!template text="""Previously, I was either forced to have""" start="00:04:10.760" video="mainVideo-detached" id="subtitle"]] +[[!template text="""the terminal open so I could see it or hiding it,""" start="00:04:15.520" video="mainVideo-detached" id="subtitle"]] +[[!template text="""but then risking having forgotten it.""" start="00:04:19.040" video="mainVideo-detached" id="subtitle"]] +[[!template new="1" text="""How do we then see the output of a session?""" start="00:04:27.854" video="mainVideo-detached" id="subtitle"]] +[[!template text="""Get the detached-list-sessions command,""" start="00:04:32.560" video="mainVideo-detached" id="subtitle"]] +[[!template text="""and here we see""" start="00:04:36.888" video="mainVideo-detached" id="subtitle"]] +[[!template text="""the command that we just built,""" start="00:04:42.954" video="mainVideo-detached" id="subtitle"]] +[[!template text="""and we see the guix pull with an asterisk""" start="00:04:45.600" video="mainVideo-detached" id="subtitle"]] +[[!template text="""indicating that it is continuously running.""" start="00:04:48.440" video="mainVideo-detached" id="subtitle"]] +[[!template text="""If I press enter,""" start="00:04:54.480" video="mainVideo-detached" id="subtitle"]] +[[!template text="""we will get the output of the session here.""" start="00:05:01.521" video="mainVideo-detached" id="subtitle"]] +[[!template text="""And since it was run using compile,""" start="00:05:04.440" video="mainVideo-detached" id="subtitle"]] +[[!template text="""we also have compilation mode enabled here,""" start="00:05:07.200" video="mainVideo-detached" id="subtitle"]] +[[!template text="""so we could navigate between""" start="00:05:11.720" video="mainVideo-detached" id="subtitle"]] +[[!template text="""potential warnings or errors.""" start="00:05:14.288" video="mainVideo-detached" id="subtitle"]] +[[!template text="""And we see that there is a warning here.""" start="00:05:17.160" video="mainVideo-detached" id="subtitle"]] +[[!template new="1" text="""One thing that""" start="00:05:21.440" video="mainVideo-detached" id="subtitle"]] +[[!template text="""I have prepared here is that""" start="00:05:26.721" video="mainVideo-detached" id="subtitle"]] +[[!template text="""if I open up the user interface,""" start="00:05:28.920" video="mainVideo-detached" id="subtitle"]] +[[!template text="""we only see two sessions,""" start="00:05:32.240" video="mainVideo-detached" id="subtitle"]] +[[!template text="""but that is because we applied a filter here.""" start="00:05:35.760" video="mainVideo-detached" id="subtitle"]] +[[!template text="""So, we have actually the only sessions""" start="00:05:39.088" video="mainVideo-detached" id="subtitle"]] +[[!template text="""that are created within the last 12 hours""" start="00:05:43.160" video="mainVideo-detached" id="subtitle"]] +[[!template text="""and that are considered unique.""" start="00:05:46.000" video="mainVideo-detached" id="subtitle"]] +[[!template text="""So, if I remove the uniqueness,""" start="00:05:47.360" video="mainVideo-detached" id="subtitle"]] +[[!template text="""we also see that we have a previous build""" start="00:05:50.600" video="mainVideo-detached" id="subtitle"]] +[[!template text="""running on the main branch.""" start="00:05:57.040" video="mainVideo-detached" id="subtitle"]] +[[!template text="""So, I think that's typically normal""" start="00:05:59.280" video="mainVideo-detached" id="subtitle"]] +[[!template text="""that you might have that.""" start="00:06:02.760" video="mainVideo-detached" id="subtitle"]] +[[!template new="1" text="""And since the sessions can be considered text,""" start="00:06:07.080" video="mainVideo-detached" id="subtitle"]] +[[!template text="""we can just mark these two and check,""" start="00:06:10.920" video="mainVideo-detached" id="subtitle"]] +[[!template text="""does this warning exist on the main branch or not?""" start="00:06:14.760" video="mainVideo-detached" id="subtitle"]] +[[!template text="""So, we can just diff these ones""" start="00:06:18.880" video="mainVideo-detached" id="subtitle"]] +[[!template text="""and we see that the warning is only present""" start="00:06:22.720" video="mainVideo-detached" id="subtitle"]] +[[!template text="""on the emacsconf branch.""" start="00:06:27.554" video="mainVideo-detached" id="subtitle"]] +[[!template new="1" text="""Now, another benefit, in my opinion,""" start="00:06:34.040" video="mainVideo-detached" id="subtitle"]] +[[!template text="""of the new way of working is that""" start="00:06:37.520" video="mainVideo-detached" id="subtitle"]] +[[!template text="""I have these properties being displayed""" start="00:06:41.840" video="mainVideo-detached" id="subtitle"]] +[[!template text="""in the user interface.""" start="00:06:43.240" video="mainVideo-detached" id="subtitle"]] +[[!template text="""I can quickly see which commands are still running,""" start="00:06:45.421" video="mainVideo-detached" id="subtitle"]] +[[!template text="""what hosts they are running on,""" start="00:06:48.960" video="mainVideo-detached" id="subtitle"]] +[[!template text="""where they are running,""" start="00:06:51.360" video="mainVideo-detached" id="subtitle"]] +[[!template text="""and for how long they have been running.""" start="00:06:53.488" video="mainVideo-detached" id="subtitle"]] +[[!template text="""And if they have run,""" start="00:06:58.221" video="mainVideo-detached" id="subtitle"]] +[[!template text="""how long did it take?""" start="00:07:00.421" video="mainVideo-detached" id="subtitle"]] +[[!template new="1" text="""Occasionally, though, there might be""" start="00:07:04.521" video="mainVideo-detached" id="subtitle"]] +[[!template text="""even more input needed to distinguish sessions.""" start="00:07:06.880" video="mainVideo-detached" id="subtitle"]] +[[!template text="""So, what I typically do then is""" start="00:07:16.880" video="mainVideo-detached" id="subtitle"]] +[[!template text="""press A to annotate the session,""" start="00:07:19.600" video="mainVideo-detached" id="subtitle"]] +[[!template text="""I would add a "Warning found at emacsconf"""" start="00:07:22.200" video="mainVideo-detached" id="subtitle"]] +[[!template text="""And then it will show up this annotation""" start="00:07:29.088" video="mainVideo-detached" id="subtitle"]] +[[!template text="""in the echo area when I select the session.""" start="00:07:32.954" video="mainVideo-detached" id="subtitle"]] +[[!template new="1" text="""Another great improvement of using these sessions""" start="00:07:45.088" video="mainVideo-detached" id="subtitle"]] +[[!template text="""and consider them being text is,""" start="00:07:48.080" video="mainVideo-detached" id="subtitle"]] +[[!template text="""now we also see the guix pull completed here.""" start="00:07:52.640" video="mainVideo-detached" id="subtitle"]] +[[!template text="""Then we can also select and see that, okay,""" start="00:07:57.421" video="mainVideo-detached" id="subtitle"]] +[[!template text="""there is a lot of updates in this command,""" start="00:08:01.021" video="mainVideo-detached" id="subtitle"]] +[[!template text="""but let's not look at it now.""" start="00:08:08.600" video="mainVideo-detached" id="subtitle"]] +[[!template text="""Let's instead remember that""" start="00:08:10.160" video="mainVideo-detached" id="subtitle"]] +[[!template text="""previously last week""" start="00:08:17.654" video="mainVideo-detached" id="subtitle"]] +[[!template text="""when I ran a guix pull,""" start="00:08:19.840" video="mainVideo-detached" id="subtitle"]] +[[!template text="""I saw an Emacs package that looks interesting.""" start="00:08:21.640" video="mainVideo-detached" id="subtitle"]] +[[!template text="""I rather don't remember its full name,""" start="00:08:27.680" video="mainVideo-detached" id="subtitle"]] +[[!template text="""but it has something to do with collection.""" start="00:08:30.040" video="mainVideo-detached" id="subtitle"]] +[[!template text="""So, what I then can do is""" start="00:08:32.720" video="mainVideo-detached" id="subtitle"]] +[[!template text="""remove the 12 hour narrowing criteria,""" start="00:08:38.840" video="mainVideo-detached" id="subtitle"]] +[[!template text="""and we can see here I got sessions ranging back""" start="00:08:42.280" video="mainVideo-detached" id="subtitle"]] +[[!template text="""even to 28th of October.""" start="00:08:47.680" video="mainVideo-detached" id="subtitle"]] +[[!template text="""Since these are just to be considered text,""" start="00:08:51.040" video="mainVideo-detached" id="subtitle"]] +[[!template text="""I can--""" start="00:08:55.600" video="mainVideo-detached" id="subtitle"]] +[[!template text="""now let's first narrow the sessions""" start="00:08:58.754" video="mainVideo-detached" id="subtitle"]] +[[!template text="""to only show the ones that run guix pull.""" start="00:09:00.320" video="mainVideo-detached" id="subtitle"]] +[[!template text="""Then I would narrow based on the output""" start="00:09:05.288" video="mainVideo-detached" id="subtitle"]] +[[!template text="""containing a regular expression.""" start="00:09:08.440" video="mainVideo-detached" id="subtitle"]] +[[!template text="""So, I remember it was something with collection.""" start="00:09:11.280" video="mainVideo-detached" id="subtitle"]] +[[!template text="""And we got one hit.""" start="00:09:14.400" video="mainVideo-detached" id="subtitle"]] +[[!template text="""Here it should be something with collection.""" start="00:09:20.088" video="mainVideo-detached" id="subtitle"]] +[[!template text="""It was emacs-flymake-collection.""" start="00:09:24.188" video="mainVideo-detached" id="subtitle"]] +[[!template text="""This is something that is a""" start="00:09:29.621" video="mainVideo-detached" id="subtitle"]] +[[!template text="""very nice feature to have.""" start="00:09:34.821" video="mainVideo-detached" id="subtitle"]] +[[!template text="""It doesn't create any overhead""" start="00:09:38.400" video="mainVideo-detached" id="subtitle"]] +[[!template text="""of having these old sessions lying around""" start="00:09:42.160" video="mainVideo-detached" id="subtitle"]] +[[!template text="""and occasionally, it can be interesting""" start="00:09:45.280" video="mainVideo-detached" id="subtitle"]] +[[!template text="""to search through them as well.""" start="00:09:47.400" video="mainVideo-detached" id="subtitle"]] +[[!template text="""So, for me, this is another example of""" start="00:09:49.680" video="mainVideo-detached" id="subtitle"]] +[[!template text="""when bringing workflows into Emacs,""" start="00:09:55.000" video="mainVideo-detached" id="subtitle"]] +[[!template text="""it often opens up new exciting possibilities.""" start="00:10:00.054" video="mainVideo-detached" id="subtitle"]] +[[!template text="""Thanks a lot for listening.""" start="00:10:05.121" video="mainVideo-detached" id="subtitle"]] + + + +Captioner: anush Questions or comments? Please e-mail [niklas.eklund@posteo.net](mailto:niklas.eklund@posteo.net?subject=Comment%20for%20EmacsConf%202022%20detached%3A%20Getting%20detached%20from%20Emacs) diff --git a/2022/info/detached-before.md b/2022/info/detached-before.md index 0c4ad118..a4673e9f 100644 --- a/2022/info/detached-before.md +++ b/2022/info/detached-before.md @@ -3,16 +3,37 @@ In this talk, Niklas Eklund shows how to use detached to manage long-running asy The following image shows where the talk is in the schedule for Sun 2022-12-04. Solid lines show talks with Q&A via BigBlueButton. Dashed lines show talks with Q&A via IRC or Etherpad.<div class="schedule-in-context schedule-svg-container" data-slug="detached"> -<svg width="800" height="150" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title> Schedule for Sunday</title> <rect width="800" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Sunday</text> <a href="/2022/talks/sun-open" title="Sunday opening remarks" data-slug="sun-open"> <title> 9:00- 9:05 Sunday opening remarks</title> <rect x="0" y="15" opacity="0.5" width="7" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(5,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-open</text></g></a> <a href="/2022/talks/survey" title="Results of the 2022 Emacs Survey" data-slug="survey"> <title> 9:05- 9:25 Results of the 2022 Emacs Survey</title> <rect x="7" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(36,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> survey</text></g></a> <a href="/2022/talks/orgyear" title="This Year in Org" data-slug="orgyear"> <title> 9:35- 9:45 This Year in Org</title> <rect x="54" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(67,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgyear</text></g></a> <a href="/2022/talks/rolodex" title="Build a Zettelkasten with the Hyperbole Rolodex" data-slug="rolodex"> <title> 9:55-10:20 Build a Zettelkasten with the Hyperbole Rolodex</title> <rect x="86" y="15" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(123,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rolodex</text></g></a> <a href="/2022/talks/orgsuperlinks" title="Linking headings with org-super-links (poor-man's Zettelkasten)" data-slug="orgsuperlinks"> <title> 10:40-10:50 Linking headings with org-super-links (poor-man's Zettelkasten)</title> <rect x="156" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(169,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgsuperlinks</text></g></a> <a href="/2022/talks/orgvm" title="orgvm: a simple HTTP server for org" data-slug="orgvm"> <title> 11:10-11:20 orgvm: a simple HTTP server for org</title> <rect x="203" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(216,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgvm</text></g></a> <a href="/2022/talks/hyperorg" title="Powerful productivity with Hyperbole and Org Mode" data-slug="hyperorg"> <title> 1:00- 1:30 Powerful productivity with Hyperbole and Org Mode</title> <rect x="376" y="15" opacity="0.5" width="47" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(421,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> hyperorg</text></g></a> <a href="/2022/talks/workflows" title="Org workflows for developers" data-slug="workflows"> <title> 1:50- 2:15 Org workflows for developers</title> <rect x="454" y="15" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(491,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> workflows</text></g></a> <a href="/2022/talks/grail" title="GRAIL---A Generalized Representation and Aggregation of Information Layers" data-slug="grail"> <title> 2:35- 2:55 GRAIL---A Generalized Representation and Aggregation of Information Layers</title> <rect x="525" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(554,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> grail</text></g></a> <a href="/2022/talks/indieweb" title="Putting Org Mode on the Indieweb" data-slug="indieweb"> <title> 3:25- 3:45 Putting Org Mode on the Indieweb</title> <rect x="603" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(632,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> indieweb</text></g></a> <a href="/2022/talks/devel" title="Emacs development updates" data-slug="devel"> <title> 4:05- 4:15 Emacs development updates</title> <rect x="666" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(679,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> devel</text></g></a> <a href="/2022/talks/fanfare" title="Fanfare for the Common Emacs User" data-slug="fanfare"> <title> 4:25- 4:35 Fanfare for the Common Emacs User</title> <rect x="698" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(711,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> fanfare</text></g></a> <a href="/2022/talks/sun-close" title="Sunday closing remarks" data-slug="sun-close"> <title> 4:50- 5:00 Sunday closing remarks</title> <rect x="737" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(750,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-close</text></g></a> <a href="/2022/talks/rde" title="rde Emacs introduction" data-slug="rde"> <title> 10:00-10:25 rde Emacs introduction</title> <rect x="94" y="75" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(131,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rde</text></g></a> <a href="/2022/talks/justl" title="justl: Driving recipes within Emacs" data-slug="justl"> <title> 10:50-11:05 justl: Driving recipes within Emacs</title> <rect x="172" y="75" opacity="0.5" width="23" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(193,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> justl</text></g></a> <a href="/2022/talks/rms" title="What I'd like to see in Emacs" data-slug="rms"> <title> 11:15-11:35 What I'd like to see in Emacs</title> <rect x="211" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(240,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rms</text></g></a> <a href="/2022/talks/detached" title="Getting detached from Emacs" data-slug="detached"> <title> 1:00- 1:15 Getting detached from Emacs</title> <rect stroke-width="3" x="376" y="75" opacity="0.8" width="23" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(397,133)"> <text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> detached</text></g></a> <a href="/2022/talks/eshell" title="Top 10 reasons why you should be using Eshell" data-slug="eshell"> <title> 1:40- 1:55 Top 10 reasons why you should be using Eshell</title> <rect x="439" y="75" opacity="0.5" width="23" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(460,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eshell</text></g></a> <a href="/2022/talks/async" title="Emacs was async before async was cool" data-slug="async"> <title> 2:20- 2:40 Emacs was async before async was cool</title> <rect x="501" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(530,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> async</text></g></a> <a href="/2022/talks/dbus" title="The Wheels on D-Bus" data-slug="dbus"> <title> 3:15- 3:35 The Wheels on D-Bus</title> <rect x="588" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(617,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> dbus</text></g></a> <a href="/2022/talks/localizing" title="Pre-localizing Emacs" data-slug="localizing"> <title> 4:00- 4:10 Pre-localizing Emacs</title> <rect x="658" y="75" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(671,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> localizing</text></g></a> <a href="/2022/talks/python" title="Short hyperlinks to Python docs" data-slug="python"> <title> 4:30- 4:35 Short hyperlinks to Python docs</title> <rect x="705" y="75" opacity="0.5" width="7" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(710,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> python</text></g></a> <g transform="translate(0,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(94,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(188,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(282,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(376,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(470,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(564,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(658,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(752,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 5 PM</text></g></svg> +<svg width="800" height="150" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title> Schedule for Sunday</title> <rect width="800" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Sunday</text> <a href="/2022/talks/sun-open" title="Sunday opening remarks" data-slug="sun-open"> <title> 9:00- 9:05 Sunday opening remarks</title> <rect x="0" y="15" opacity="0.5" width="7" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(5,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-open</text></g></a> <a href="/2022/talks/survey" title="Results of the 2022 Emacs Survey" data-slug="survey"> <title> 9:06- 9:26 Results of the 2022 Emacs Survey</title> <rect x="9" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(38,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> survey</text></g></a> <a href="/2022/talks/orgyear" title="This Year in Org" data-slug="orgyear"> <title> 9:35- 9:45 This Year in Org</title> <rect x="54" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(67,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgyear</text></g></a> <a href="/2022/talks/rolodex" title="Build a Zettelkasten with the Hyperbole Rolodex" data-slug="rolodex"> <title> 9:57-10:22 Build a Zettelkasten with the Hyperbole Rolodex</title> <rect x="89" y="15" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(126,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rolodex</text></g></a> <a href="/2022/talks/orgsuperlinks" title="Linking headings with org-super-links (poor-man's Zettelkasten)" data-slug="orgsuperlinks"> <title> 10:40-10:50 Linking headings with org-super-links (poor-man's Zettelkasten)</title> <rect x="156" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(169,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgsuperlinks</text></g></a> <a href="/2022/talks/orgvm" title="orgvm: a simple HTTP server for org" data-slug="orgvm"> <title> 11:10-11:20 orgvm: a simple HTTP server for org</title> <rect x="203" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(216,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgvm</text></g></a> <a href="/2022/talks/hyperorg" title="Powerful productivity with Hyperbole and Org Mode" data-slug="hyperorg"> <title> 1:00- 1:30 Powerful productivity with Hyperbole and Org Mode</title> <rect x="376" y="15" opacity="0.5" width="47" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(421,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> hyperorg</text></g></a> <a href="/2022/talks/workflows" title="Org workflows for developers" data-slug="workflows"> <title> 1:50- 2:15 Org workflows for developers</title> <rect x="454" y="15" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(491,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> workflows</text></g></a> <a href="/2022/talks/grail" title="GRAIL---A Generalized Representation and Aggregation of Information Layers" data-slug="grail"> <title> 2:35- 2:55 GRAIL---A Generalized Representation and Aggregation of Information Layers</title> <rect x="525" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(554,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> grail</text></g></a> <a href="/2022/talks/indieweb" title="Putting Org Mode on the Indieweb" data-slug="indieweb"> <title> 3:25- 3:45 Putting Org Mode on the Indieweb</title> <rect x="603" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(632,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> indieweb</text></g></a> <a href="/2022/talks/devel" title="Emacs development updates" data-slug="devel"> <title> 4:05- 4:15 Emacs development updates</title> <rect x="666" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(679,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> devel</text></g></a> <a href="/2022/talks/fanfare" title="Fanfare for the Common Emacs User" data-slug="fanfare"> <title> 4:25- 4:35 Fanfare for the Common Emacs User</title> <rect x="698" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(711,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> fanfare</text></g></a> <a href="/2022/talks/sun-close" title="Sunday closing remarks" data-slug="sun-close"> <title> 4:50- 5:00 Sunday closing remarks</title> <rect x="737" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(750,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-close</text></g></a> <a href="/2022/talks/rde" title="rde Emacs introduction" data-slug="rde"> <title> 10:00-10:25 rde Emacs introduction</title> <rect x="94" y="75" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(131,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rde</text></g></a> <a href="/2022/talks/justl" title="justl: Driving recipes within Emacs" data-slug="justl"> <title> 10:50-11:05 justl: Driving recipes within Emacs</title> <rect x="172" y="75" opacity="0.5" width="23" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(193,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> justl</text></g></a> <a href="/2022/talks/rms" title="What I'd like to see in Emacs" data-slug="rms"> <title> 11:15-11:35 What I'd like to see in Emacs</title> <rect x="211" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(240,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rms</text></g></a> <a href="/2022/talks/detached" title="Getting detached from Emacs" data-slug="detached"> <title> 1:01- 1:16 Getting detached from Emacs</title> <rect stroke-width="3" x="378" y="75" opacity="0.8" width="23" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(399,133)"> <text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> detached</text></g></a> <a href="/2022/talks/eshell" title="Top 10 reasons why you should be using Eshell" data-slug="eshell"> <title> 1:40- 1:55 Top 10 reasons why you should be using Eshell</title> <rect x="439" y="75" opacity="0.5" width="23" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(460,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eshell</text></g></a> <a href="/2022/talks/async" title="Emacs was async before async was cool" data-slug="async"> <title> 2:20- 2:40 Emacs was async before async was cool</title> <rect x="501" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(530,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> async</text></g></a> <a href="/2022/talks/dbus" title="The Wheels on D-Bus" data-slug="dbus"> <title> 3:15- 3:35 The Wheels on D-Bus</title> <rect x="588" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(617,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> dbus</text></g></a> <a href="/2022/talks/localizing" title="Pre-localizing Emacs" data-slug="localizing"> <title> 4:00- 4:10 Pre-localizing Emacs</title> <rect x="658" y="75" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(671,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> localizing</text></g></a> <a href="/2022/talks/python" title="Short hyperlinks to Python docs" data-slug="python"> <title> 4:30- 4:35 Short hyperlinks to Python docs</title> <rect x="705" y="75" opacity="0.5" width="7" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(710,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> python</text></g></a> <g transform="translate(0,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(94,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(188,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(282,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(376,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(470,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(564,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(658,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(752,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 5 PM</text></g></svg> </div> [[!toc ]] Format: 11-min talk followed by live Q&A (<https://emacsconf.org/current/detached/room>) Etherpad: <https://pad.emacsconf.org/2022-detached> Discuss on IRC: [#emacsconf-dev](https://chat.emacsconf.org/?join=emacsconf,emacsconf-dev) -Status: Talk captioned -<div>Times in different timezones:</div><div class="times" start="2022-12-04T18:00:00Z" end="2022-12-04T18:15:00Z"><div class="conf-time">Sunday, Dec 4 2022, ~1:00 PM - 1:15 PM EST (US/Eastern)</div><div class="others"><div>which is the same as:</div>Sunday, Dec 4 2022, ~12:00 PM - 12:15 PM CST (US/Central)<br />Sunday, Dec 4 2022, ~11:00 AM - 11:15 AM MST (US/Mountain)<br />Sunday, Dec 4 2022, ~10:00 AM - 10:15 AM PST (US/Pacific)<br />Sunday, Dec 4 2022, ~6:00 PM - 6:15 PM UTC <br />Sunday, Dec 4 2022, ~7:00 PM - 7:15 PM CET (Europe/Paris)<br />Sunday, Dec 4 2022, ~8:00 PM - 8:15 PM EET (Europe/Athens)<br />Sunday, Dec 4 2022, ~11:30 PM - 11:45 PM IST (Asia/Kolkata)<br />Monday, Dec 5 2022, ~2:00 AM - 2:15 AM +08 (Asia/Singapore)<br />Monday, Dec 5 2022, ~3:00 AM - 3:15 AM JST (Asia/Tokyo)</div></div><div><a href="/2022/watch/dev/">Find out how to watch and participate</a></div> +Status: Now playing on the conference livestream +<div>Times in different timezones:</div><div class="times" start="2022-12-04T18:01:00Z" end="2022-12-04T18:16:00Z"><div class="conf-time">Sunday, Dec 4 2022, ~1:01 PM - 1:16 PM EST (US/Eastern)</div><div class="others"><div>which is the same as:</div>Sunday, Dec 4 2022, ~12:01 PM - 12:16 PM CST (US/Central)<br />Sunday, Dec 4 2022, ~11:01 AM - 11:16 AM MST (US/Mountain)<br />Sunday, Dec 4 2022, ~10:01 AM - 10:16 AM PST (US/Pacific)<br />Sunday, Dec 4 2022, ~6:01 PM - 6:16 PM UTC <br />Sunday, Dec 4 2022, ~7:01 PM - 7:16 PM CET (Europe/Paris)<br />Sunday, Dec 4 2022, ~8:01 PM - 8:16 PM EET (Europe/Athens)<br />Sunday, Dec 4 2022, ~11:31 PM - 11:46 PM IST (Asia/Kolkata)<br />Monday, Dec 5 2022, ~2:01 AM - 2:16 AM +08 (Asia/Singapore)<br />Monday, Dec 5 2022, ~3:01 AM - 3:16 AM JST (Asia/Tokyo)</div></div><div><a href="/2022/watch/dev/">Find out how to watch and participate</a></div> +[[!template id="vid" vidid="detached-mainVideo" src="https://media.emacsconf.org/2022/emacsconf-2022-detached--getting-detached-from-emacs--niklas-eklund--main.webm" poster="https://media.emacsconf.org/2022/emacsconf-2022-detached--getting-detached-from-emacs--niklas-eklund--main.png" captions="""<track label="English" kind="captions" srclang="en" src="/2022/captions/emacsconf-2022-detached--getting-detached-from-emacs--niklas-eklund--main.vtt" default />""" +size="42M" duration="10:11" other_resources="""[Download --main.webm (42MB)](https://media.emacsconf.org/2022/emacsconf-2022-detached--getting-detached-from-emacs--niklas-eklund--main.webm) +[Download --main.vtt](https://media.emacsconf.org/2022/emacsconf-2022-detached--getting-detached-from-emacs--niklas-eklund--main.vtt) +[Download --main--chapters.vtt](https://media.emacsconf.org/2022/emacsconf-2022-detached--getting-detached-from-emacs--niklas-eklund--main--chapters.vtt) +[View transcript](https://emacsconf.org/2022/talks/detached#detached-mainVideo-transcript) +[View on Toobnix](https://toobnix.org/w/5g6W1vPuWeHognYnvnnbNk) +"""]] +[[!template id="chapters" vidid="detached-mainVideo" data=""" +00:00:00.000 Intro +00:27.120 The problem +01:15.800 My solution: detached +02:30.840 Shell +03:30.800 Compile +04:27.854 Detached list sessions +05:21.440 Narrow criteria +06:07.080 Diff sessions +06:34.040 Rich interface with properties +07:04.521 Annotation +07:45.088 Searching through sessions + +"""]] # Description |