summaryrefslogtreecommitdiffstats
path: root/2022/captions/emacsconf-2022-detached--getting-detached-from-emacs--niklas-eklund--main.vtt
diff options
context:
space:
mode:
Diffstat (limited to '2022/captions/emacsconf-2022-detached--getting-detached-from-emacs--niklas-eklund--main.vtt')
-rw-r--r--2022/captions/emacsconf-2022-detached--getting-detached-from-emacs--niklas-eklund--main.vtt502
1 files changed, 502 insertions, 0 deletions
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.