-- Leo's gemini proxy

-- Connecting to tilde.pink:1965...

-- Connected

-- Sending request

-- Meta line: 20 text/gemini;

motidu: the emacs update


tldr:


gnus for nntp

erc for irc

eww for web browsing

fancy ibuffer stuff

dired for file management


it's day 23 in the "month of things i don't use". i know i said i wouldn't use emacs this month, but my init.el file kept calling my name, and i gave in. i'm only using parts of emacs that i never really tried before, so it doesn't count as a forfeit!


gnus for newsgroups


gnus is one of those massive things that people do everything with. i could never wrap my tiny mind around it, but it's primarily supposed to be a news reader, so that's what i'm going to use it as.


i don't like how so many articles on gnus are *massive*, like, it's bonkers. it's nice to have loads of info, but it took a while just to get this basic config working:


(setq
 gnus-select-method '(nntp "news.tilde.pink")
 gnus-thread-hide-subtree t
 gnus-newsgroup-maximum-articles 50
 gnus-summary-line-format "%U%R%z%d  %-30n  %B %s\n")

here's what these lines do:


point gnus to an nntp news server.

collapse all threads by default.

don't download more than 50 entries per group.

make group entries cleaner than the default.


i'm really liking gnus so far. i think it's super cute! i still prefer alpine, but it's a close call to make.


irc with erc


i tried weechat & catgirl, and they were both fun, but i'm really enjoying erc the most in terms of alternative irc clients, especially when ibuffer is configured correctly! here's my erc config:


(require 'erc)
(require 'tls)

(setq
 erc-nick      "emilog"
 erc-full-name "emily card"
 erc-fill-function 'erc-fill-static
 erc-fill-static-center  15
 erc-hide-list '("JOIN" "PART" "QUIT"))

(global-set-key "\C-cea"
  (lambda ()
    (interactive)
    (erc :server "irc1.example.com"
         :port   "6667")))

(global-set-key "\C-ceb"
  (lambda ()
    (interactive)
    (erc-tls :server "irc2.example.com"
             :port   "6697")))

the variables:


set my nick (my display name)

set a full name (usually invisible)

put nicks in one column, text in another

set how big the nick column is

ignore join/quit status messages


i also add two servers that i can connect to using keyboard shortcuts! one server uses tls/ssl encryption, just to prove that erc can, in fact, do encryption!


the eww web browser


i can't get used to w3c, and i miss lynx, but eww is actually very solid! i don't browse the web much unless i /really/ need to look something up, so it's not a big deal, but it's comfy:


(require 'eww)
(require 'shr)

(setq
 browse-url-browser-function 'eww-browse-url
 shr-use-fonts   nil
 shr-indentation 2
 shr-use-colors  nil
 shr-width       70
 shr-bullet      "• ")

again, a description of the code:


open links with eww by default

don't load special fonts

don't load custom colors

softwrap text at 70 columns

give lists special unicode bullets


being able to soft wrap the text at 70 columns makes it much more comfy to use, and it's handy to be able to disable fonts and colors!


i like eww!


ibuffer stuffs


ibuffer is a list of emacs buffers you have open. i just found out that you can create custom "folders" for your buffers! for example, all my erc buffers automatically get sorted into an "erc" folder. it's a neato burrito!


(require 'ibuffer)
(require 'ibuffer-ext)

(setq
 ibuffer-show-empty-filter-groups nil
 ibuffer-saved-filter-groups
 '(("default"
    ("erc"   (mode . erc-mode))
    ("eww"   (mode . eww-mode))
    ("dired" (mode . dired-mode))
    ("meta"  (name . "^\\*"))
    ("help" (or (name . "\*Help\*")
		(name . "\*Info\*"))))))

(add-hook 'ibuffer-mode-hook
	  (lambda ()
	    (ibuffer-switch-to-saved-filter-groups "default")))

the important variable here is 'ibuffer-saved-filter-groups', which is a list of folders. every dired buffer gets put into the dired folder. every buffer that starts with an asterisk (*) gets put into the "meta" folder! it's very nice.


in order for these folders to work, we need to activate them, which is what the hook does. ibuffer is so clean now, and i don't have to worry about visual clutter!


file management with dired


dired is a file manager, and it's cool, but this might be a bit of a longer code block to include...


;; sort directories first
(require 'ls-lisp)
(setq ls-lisp-dirs-first t)
(setq ls-lisp-use-insert-directory-program nil)

;; omit dotfiles
(setq dired-omit-files (concat dired-omit-files "\\|^\\..+$"))

;; activate extra dired features
(add-hook 'dired-load-hook
	  (lambda ()
	    (setq
	     dired-x-hands-off-my-keys nil)
	    (load "dired-x")))

;; add some fun shortcuts
(add-hook 'dired-mode-hook
	  (lambda ()
	    (local-set-key (kbd "/") 'dired-omit-mode)
	    (local-set-key (kbd "h") 'dired-hide-details-mode)
	    (local-set-key (kbd "-") 'dired-up-directory)
	    (local-set-key (kbd "e") 'dired-do-async-shell-command)
	    (dired-hide-details-mode 1)
	    (dired-omit-mode 1)))

(global-set-key "\C-cd"  'dired-jump)

when in dired mode, i can use the ampersand key (&) to run a shell command on the current file. it's very nice to not have to leave emacs to run scripts!


conclusion


i used a lot of this stuff casually, but it feels /so good/ to follow tutorials, read gemlog posts, and check the manual so that i can /really/ understand it all better!


i also discovered the absolute best way to create gemini pages in emacs, but i think that's a post for another day.


sleep well, and stay safe!


march 31, 2021

-- Response ended

-- Page fetched on Sat Apr 20 04:11:53 2024