#+TITLE: Auxillary and Optional Applications #+AUTHOR: Howard X. Abrams #+DATE: 2021-11-18 A literate programming file for helper apps in Emacs. #+begin_src emacs-lisp :exports none ;;; ha-aux-apps --- Configuring helper apps in Emacs. -*- lexical-binding: t; -*- ;; ;; © 2021-2022 Howard X. Abrams ;; Licensed under a Creative Commons Attribution 4.0 International License. ;; See http://creativecommons.org/licenses/by/4.0/ ;; ;; Author: Howard X. Abrams ;; Maintainer: Howard X. Abrams ;; Created: November 18, 2021 ;; ;; This file is not part of GNU Emacs. ;; ;; *NB:* Do not edit this file. Instead, edit the original literate file at: ;; ~/other/hamacs/ha-aux-apps.org ;; And tangle the file to recreate this one. ;; ;;; Code: #+end_src * Introduction The following applications are not needed. I alternate between trying to /stay in Emacs/ taking advantage of the consistent interface, and using a stand-alone app on my Workday computer. * Twitter The venerable [[https://github.com/hayamiz/twittering-mode/tree/master][twittering-mode]] allows me to follow all the twits. #+begin_src emacs-lisp (use-package twittering-mode :init (setq twittering-use-master-password t epa-pinentry-mode 'loopback) :config (defalias 'epa--decode-coding-string 'decode-coding-string) (ha-leader "a t" '("twitter" . twit))) #+end_src * Mastodon Glad to see the 2FA feature is working on the [[https://codeberg.org/martianh/mastodon.el][mastodon.el]] project, and even more glad to see the great birdland diaspora arrive in the land of the toots. #+begin_src emacs-lisp (use-package mastodon :straight (:repo "https://codeberg.org/martianh/mastodon.el") :init (setq mastodon-instance-url "https://emacs.ch" mastodon-active-user "howard") :bind (:map mastodon-mode-map ("g" . mastodon-tl--update) ("@" . my-mastodon-mentions))) #+end_src I would like a dedicate perspective to Mastodon, and I would like a leader key sequence that /expands/ will all options, once Mastodon is running in its own perspective: #+begin_src emacs-lisp (use-package mastodon :config (defun mastodon-perspective () (interactive) (let ((already-tooted? (seq-contains-p (persp-names) "mastodon" 'equal))) (persp-switch "mastodon") (unless already-tooted? (ha-leader "a m t" '("toot" . mastodon-toot) "a m u" '("update" . mastodon-tl--update) "a m d" '("discover" . mastodon-discover)) (my-mastodon-start)))) (ha-leader "a m" '(:ignore t :which-key "mastodon") "a m m" '("perspective" . mastodon-perspective))) #+end_src Starting the =mastodon= perspective, could set things up: #+begin_src emacs-lisp (defun my-mastodon-start () "Configure the window placement for a Mastodon Instance." (let ((default-directory (getenv "HOME"))) (mastodon) (split-window-right) (mastodon-tl--get-local-timeline) (split-window-right) (my-mastodon-mentions))) #+end_src What about a timeline of just call-outs to me? #+begin_src emacs-lisp (defun mastodon-mentions--timeline (json) "Format JSON in Emacs buffer." (if (seq-empty-p json) (message "Looks like you have no (more) notifications for the moment.") (mapc #'mastodon-notifications--by-type json) (goto-char (point-min)))) (defun my-mastodon-mentions () "Display mentions in buffer." (interactive) (mastodon-tl--init-sync "mentions" "notifications?exclude_types=follow,favourite,reblog,poll,follow_request&limit=50" 'mastodon-mentions--timeline)) #+end_src Now I need to make a function to paste the same message to both while we make a transition. #+begin_src emacs-lisp (defun my-mastodon-toot-public-string (message) (interactive "sMessage: ") (let* ((endpoint (mastodon-http--api "statuses")) (args `(("status" . ,message) ("visibility" . "public")))) (mastodon-http--post endpoint args nil))) #+end_src * Telega I'm thinking the [[https://zevlg.github.io/telega.el/][Telega package]] would be better than Bitlbee for Telegram communication. Seems to have a bug on the Melpa version, so I'm keeping this to the =HEAD=, if I've cloned it. #+begin_src emacs-lisp (when (file-exists-p "~/other/telega.el") (use-package telega :straight (:local-repo "~/other/telega.el") :commands (telega) :init (setq telega-use-images nil) :config (ha-leader "a T" 'telega))) #+end_src For some reason, you need [[https://github.com/Fanael/rainbow-identifiers][rainbow-identifiers]] to work, oh, I guess the docs state this. * RPG DM Been working on my [[https://gitlab.com/howardabrams/emacs-rpgdm][RPG DM project]] for getting Emacs helping as a /Dungeon Master's Assistant/. The idea is to be able to roll dice and whatnot. What I find most useful is the [[https://gitlab.com/howardabrams/emacs-rpgdm/-/blob/main/rpgdm-tables.el][random tables]]. #+begin_src emacs-lisp (when (f-directory? "~/other/rpgdm") (use-package rpgdm :straight (:local-repo "~/other/rpgdm") :commands (rpgdm-mode rpgdm-tables-load) :init (setq rpgdm-base (expand-file-name "~/other/rpgdm")) :config (ha-leader "t D" '("rpg dm" . rpgdm-mode)))) #+end_src And my [[https://gitlab.com/howardabrams/emacs-ironsworn][new Ironsworn project]] expands on it, giving me both the Oracles and the Moves. With an Org file, I can easily play Solo: #+begin_src emacs-lisp (when (f-directory? "~/other/emacs-ironsworn") (use-package rpgdm-ironsworn :after rpgdm :straight (:local-repo "~/other/emacs-ironsworn") :init (setq rpgdm-ironsworn-project (expand-file-name "~/other/emacs-ironsworn") ;; Ignore org links that call my RPG functions: org-link-elisp-skip-confirm-regexp (rx string-start (optional "(") "rpgdm-" (or "tables-" "ironsworn-") (one-or-more any))))) #+end_src The project is interesting, and I should record a tutorial how to use it. * Technical Artifacts :noexport: Let's =provide= a name so we can =require= this file: #+begin_src emacs-lisp :exports none (provide 'ha-aux-apps) ;;; ha-aux-apps.el ends here #+end_src #+DESCRIPTION: A literate programming file for helper apps in Emacs. #+PROPERTY: header-args:sh :tangle no #+PROPERTY: header-args:emacs-lisp :tangle yes #+PROPERTY: header-args :results none :eval no-export :comments no mkdirp yes #+OPTIONS: num:nil toc:nil todo:nil tasks:nil tags:nil date:nil #+OPTIONS: skip:nil author:nil email:nil creator:nil timestamp:nil #+INFOJS_OPT: view:nil toc:nil ltoc:t mouse:underline buttons:0 path:http://orgmode.org/org-info.js