[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/dtache cb1762ffc2 052/158: Add presentation about dtach
From: |
ELPA Syncer |
Subject: |
[elpa] externals/dtache cb1762ffc2 052/158: Add presentation about dtache version 0.2 |
Date: |
Wed, 19 Jan 2022 18:57:50 -0500 (EST) |
branch: externals/dtache
commit cb1762ffc217a4602429346cdcf8eeff5fc90cfd
Author: Niklas Eklund <niklas.eklund@posteo.net>
Commit: Niklas Eklund <niklas.eklund@posteo.net>
Add presentation about dtache version 0.2
---
README.org | 8 ++-
documentation/demo_v02.org | 156 +++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 162 insertions(+), 2 deletions(-)
diff --git a/README.org b/README.org
index b1a5246119..658db79ad6 100644
--- a/README.org
+++ b/README.org
@@ -11,6 +11,10 @@
The core concept of =dtache= is its object =dtache-session=. This object
encapsulate information about a session, such as the =command= which is run in
the session, the =working directory= from which the session is started, the
=host= on which the session runs, where the =output= of the session is stored,
where the =socket= to the underlying =dtach= process resides etc. The program
[[https://github.com/crigler/dtach][dtach]] is what makes this package
possible, it takes care of running t [...]
+The following videos features demonstrations about the package:
+- [[https://www.youtube.com/watch?v=if1W58SrClk][Dtache - An Emacs package
that provides detachable shell commands]]
+- [[https://www.youtube.com/watch?v=De5oXdnY5hY][Dtache - Version 0.2]]
+
** Features
The way =dtache= is designed with its =dtache-session= objects opens up the
possibilities for the following features.
@@ -198,9 +202,9 @@ Some programs doesn't play well with =tee=, which =dtache=
relies upon to redire
Here a command beginning with =ls= would from now on be using redirect only.
* Tips & Tricks
-** MacOS support
+** macOS support
-=Dtache= depends on =filenotify= to trigger events when a =dtach socket= is
deleted, which defines the transition from active to inactive for a dtache
session. Currently this implementation causes issues for MacOS users, it should
work, but until the root cause has been identified this provides a workaround
solution.
+=Dtache= depends on =filenotify= to trigger events when a =dtach socket= is
deleted, which defines the transition from active to inactive for a dtache
session. Currently this implementation causes issues for macOS users, it should
work, but until the root cause has been identified this provides a workaround
solution.
#+begin_src elisp :lexical t :results none
(defun my/dtache--add-end-of-session-notification-advice (session)
diff --git a/documentation/demo_v02.org b/documentation/demo_v02.org
new file mode 100644
index 0000000000..8241b48d36
--- /dev/null
+++ b/documentation/demo_v02.org
@@ -0,0 +1,156 @@
+#+title: dtache.el - Dtach Emacs
+#+author: Niklas Eklund
+#+language: en
+
+* Introduction
+
+=Dtache=, or =Detach Emacs=, is a package to run shell commands completely
detached from Emacs. With shell commands, we refer to commands that otherwise
would be run in a terminal. The detachable nature of the package means that
commands started with it can outlive Emacs, which also works on remote hosts,
essentially offering a lightweight alternative to
[[https://github.com/tmux/tmux][Tmux]] or
[[https://www.gnu.org/software/screen/][GNU Screen]]. The user can effectively
use =dtache= a [...]
+
+The core concept of =dtache= is its object =dtache-session=. This object
encapsulate information about a session, such as the =command= which is run in
the session, the =working directory= from which the session is started, the
=host= on which the session runs, where the =output= of the session is stored,
where the =socket= to the underlying =dtach= process resides etc. The program
[[https://github.com/crigler/dtach][dtach]] is what makes this package
possible, it takes care of running t [...]
+
+* Version 0.2
+** Improvements to dtache-env
+
+The =dtache-env= shell script, is now provided in the repository. The point of
this script is to make sure that the exit status of the shell command is
captured and forwarded to the session's output.
+
+#+begin_src sh
+ #!/usr/bin/env bash
+
+ dtache_command="$*"
+
+ if eval "$dtache_command"; then
+ echo -e "\nDtache session finished"
+ else
+ echo -e "\nDtache session exited abnormally with code $?"
+ fi
+#+end_src
+
+This functionality is opt-in now, so users are advised to configure the
=dtache-env= variable to point to the location of the script.
+
+#+begin_src elisp :lexical t :results none
+ (setq dtache-env "~/src/emacs-packages/dtache/dtache-env")
+#+end_src
+
+Here is a command to illustrate this.
+
+#+begin_src elisp :lexical t :results none
+ (dtache-start-session "lsl")
+#+end_src
+
+** Support for macOS
+
+It was revealed that =dtache= doesn't work as intended on =macOS=. This is due
to an issue originating from =filenotify=. Until that issue has been addressed
users are advised to use the following configuration.
+
+#+begin_src elisp :lexical t :results none
+ (defun demo/dtache--add-end-of-session-notification-advice (session)
+ "Trigger an event when SESSION transition to inactive."
+ (let ((dtache-timer-configuration
+ '(:seconds 0.5 :repeat 0.5 :function run-with-idle-timer)))
+ (dtache--session-timer session)))
+
+ (advice-add 'dtache--add-end-of-session-notification :override
#'demo/dtache--add-end-of-session-notification-advice)
+#+end_src
+
+** The user interface
+
+I have gotten some valuable feedback from =Daniel Mendler= the co-author of
=Marginalia=, about how to loosen the dependency that the package had towards
=Marginalia= and =Embark=.
+
+The result of that is that the following packages has been removed:
+- =embark-dtache=
+- =marginalia-dtache=
+
+This has also resulted in the deprecation of =dtache-list-sessions=, users are
instead advised to use the =dtache-open-session= command.
+
+** Annotations
+
+=Dtache= now features its own annotations when listing session using
=dtache-open-session=. The default configuration is the following, and it now
becomes easier for users to customize the looks of the annotations.
+
+#+begin_src elisp
+ (defvar dtache-annotation-format
+ `((:width 3 :function dtache--active-str :face dtache-active-face)
+ (:width 3 :function dtache--status-str :face dtache-failure-face)
+ (:width 10 :function dtache--session-host :face dtache-host-face)
+ (:width 40 :function dtache--working-dir-str :face
dtache-working-dir-face)
+ (:width 30 :function dtache--metadata-str :face dtache-metadata-face)
+ (:width 10 :function dtache--duration-str :face dtache-duration-face)
+ (:width 8 :function dtache--size-str :face dtache-size-face)
+ (:width 12 :function dtache--creation-str :face dtache-creation-face))
+ "The format of the annotations.")
+#+end_src
+
+* Use cases
+** Actions
+
+With =dtache-list-sessions= being deprecated what is the workflow to run
actions on sessions?
+
+#+begin_src elisp :lexical t :results none
+ (global-set-key (kbd "C-c d") dtache-action-map)
+#+end_src
+
+** Embark integration
+
+If you are an =embark= user the way to integrate =dtache= with =embark= is to
add the following the configuration.
+
+#+begin_src elisp :lexical t :results none
+ (defvar embark-dtache-map (make-composed-keymap dtache-action-map
embark-general-map))
+ (add-to-list 'embark-keymap-alist '(dtache . embark-dtache-map))
+#+end_src
+
+** Tweak annotations
+
+#+begin_src elisp :lexical t :results none
+ (setq dtache-max-command-length 30)
+#+end_src
+
+#+begin_src elisp :lexical t :results none
+ (setq dtache-annotation-format
+ `((:width 3 :function dtache--active-str :face dtache-active-face)
+ (:width 3 :function dtache--status-str :face dtache-failure-face)
+ (:width 10 :function dtache--session-host :face dtache-host-face)
+ (:width 30 :function dtache--working-dir-str :face
dtache-working-dir-face)
+ (:width 20 :function dtache--metadata-str :face dtache-metadata-face)
+ (:width 10 :function dtache--duration-str :face dtache-duration-face)
+ (:width 12 :function dtache--creation-str :face dtache-creation-face)))
+#+end_src
+
+** Shell integration
+
+The package adds support for integration with =M-x shell=.
+
+#+begin_src elisp
+ (use-package dtache-shell
+ :hook (after-init . dtache-shell-setup)
+ :general
+ (:keymaps 'dtache-shell-mode-map
+ "<S-return>" #'dtache-shell-create-session
+ "<C-return>" #'dtache-shell-attach)
+ :config
+ (setq dtache-shell-history-file "~/.bash_history"))
+#+end_src
+
+*** Demo
+
+#+begin_src sh
+ for i in {1..666} ; do sleep 1; echo "$i" ; done
+#+end_src
+
+- Run the command in the shell
+- =Detach= and then =attach=, notice how only sessions that are active is shown
+- We can run the same command on a remote host
+- We can only attach to a session running on the current host
+
+** Replace compile with dtache
+
+The command =M-x compile= or the function =compile= is utilized in a lot of
packages. For the daring user its possible to unconditionally replace =compile=
with =dtache= using the following code.
+
+#+begin_src elisp :lexical t :results none
+ (defun demo/dtache-compile-override (command &optional _)
+ "Run COMMAND with `dtache'."
+ (dtache-start-session command))
+
+ (advice-add 'compile :override #'demo/dtache-compile-override)
+#+end_src
+
+* The End
+
+Thanks for watching :)
- [elpa] externals/dtache 357432877c 033/158: Implement annotation/affixation function, (continued)
- [elpa] externals/dtache 357432877c 033/158: Implement annotation/affixation function, ELPA Syncer, 2022/01/19
- [elpa] externals/dtache ecc7563302 048/158: Update LICENSE, ELPA Syncer, 2022/01/19
- [elpa] externals/dtache 2958d21869 035/158: Remove marginalia from dtache, ELPA Syncer, 2022/01/19
- [elpa] externals/dtache afb2684f38 027/158: Improve dtache-env command, ELPA Syncer, 2022/01/19
- [elpa] externals/dtache c29079e0c0 047/158: Remove dtache-session-history, ELPA Syncer, 2022/01/19
- [elpa] externals/dtache db230154e4 016/158: Merge develop branch into master, ELPA Syncer, 2022/01/19
- [elpa] externals/dtache 2a38a9b538 030/158: Robustify against failures in configuration, ELPA Syncer, 2022/01/19
- [elpa] externals/dtache 115de6c1a2 022/158: Add default value for dtache-max-command-length, ELPA Syncer, 2022/01/19
- [elpa] externals/dtache 09d378e50a 024/158: Fix read-only problematic, ELPA Syncer, 2022/01/19
- [elpa] externals/dtache 4e99fc9daa 049/158: Deprecate dtache-list-sessions, ELPA Syncer, 2022/01/19
- [elpa] externals/dtache cb1762ffc2 052/158: Add presentation about dtache version 0.2,
ELPA Syncer <=
- [elpa] externals/dtache 5d9c8aa54f 053/158: Add macOS support, ELPA Syncer, 2022/01/19
- [elpa] externals/dtache 01a27b4dc2 056/158: Update README with reference to consult-dtache, ELPA Syncer, 2022/01/19
- [elpa] externals/dtache b75af1b9a7 059/158: Update notification setup, ELPA Syncer, 2022/01/19
- [elpa] externals/dtache b47bc3be09 061/158: Update copyright years, ELPA Syncer, 2022/01/19
- [elpa] externals/dtache 182ab7ccc6 064/158: Add integration with consult, ELPA Syncer, 2022/01/19
- [elpa] externals/dtache ea6d8ae426 068/158: Add missing autoloads, ELPA Syncer, 2022/01/19
- [elpa] externals/dtache e2efe466e0 076/158: Improve error handling with dtache-valid-session, ELPA Syncer, 2022/01/19
- [elpa] externals/dtache 79f1d905a9 078/158: Add example of how to enhance a command with dtach, ELPA Syncer, 2022/01/19
- [elpa] externals/dtache dae6db33db 083/158: Fix various minor problems, ELPA Syncer, 2022/01/19
- [elpa] externals/dtache 52e839ff4a 007/158: Update README with links, ELPA Syncer, 2022/01/19