Free Software Tools
Notes of from a Non-Programmer
Wednesday, April 22, 2026
How I got into Emacs (and Free Software)
Wednesday, April 8, 2026
Setting file times in Emacs from Time-stamps in file, or "Created " at start of a file: Generated through Google AI Summary
AI is problematic, but the sheer convenience of it has grabbed my attention. For tweaking my GNU/Linux system, AI summaries of Google searches come in a few seconds, and they sometimes save hours of research. It is helpful that low grade links to sources are often provided. I balk, however, at the damaging infrastructure involved.
A recent adventure has been developing a useful emacs lisp tool to change the metadata time stamps of a file from emacs' Time-stamps, when they exist.
Today I realized I had copied files from another system without specifying to save file metadata. Could I set the file times of files with timestamps using the "Time-stamp: < >" utility in Emacs? I searched, and, I must freely admit, I asked for more info from the AI helper of Google Search. After about 7 or more rounds of providing feedback about a regular expression that did not work, these functions were provided. Wow. The last two of these is probably sufficient for my needs. I will change the names.
(defun my/set-file-time-final ()
"Sets file time by finding 'Time-stamp' and extracting only the date/time. From Google AI."
(interactive)
(save-excursion
(goto-char (point-min))
;; 1. Find the literal word "Time-stamp" anywhere (ignores #, brackets, etc.)
(if (re-search-forward "Time-stamp" nil t)
;; 2. Look for the first date pattern (YYYY-MM-DD HH:MM:SS) that follows it
(if (re-search-forward "\\([0-9]\\{4\\}-[0-9]\\{2\\}-[0-9]\\{2\\}[ T][0-9]\\{2\\}:[0-9]\\{2\\}:[0-9]\\{2\\}\\)" nil t)
(let* ((ts-string (match-string 1))
(parsed (parse-time-string ts-string))
(lisp-time (when parsed (encode-time parsed))))
(if (and (buffer-file-name) lisp-time)
(progn
(set-file-times (buffer-file-name) lisp-time)
(message "Success! Mtime set to %s (Username ignored)" ts-string))
(error "Parsed '%s' but system couldn't use it" ts-string)))
(error "Found 'Time-stamp' but no YYYY-MM-DD HH:MM:SS format found after it"))
(error "The word 'Time-stamp' is missing from this file"))))
(defun my/dired-set-times-from-stamps ()
"In Dired, run 'my/set-file-time-final' on all marked files. From Google AI."
(interactive)
(let ((files (dired-get-marked-files)))
(dolist (file files)
(with-current-buffer (find-file-noselect file)
(condition-case err
(progn
(my/set-file-time-final)
(save-buffer))
(error (message "Skipping %s: %s" file (error-message-string err))))))
(revert-buffer) ; Refresh the Dired buffer to show the new times
(message "Done processing marked files.")))
(defun my/dired-set-times-from-stamps ()
"In Dired, sync system times for marked files. Files without stamps are ignored."
(interactive)
(let ((files (dired-get-marked-files))
(skipped 0)
(updated 0))
(dolist (file files)
(with-current-buffer (find-file-noselect file)
;; Use condition-case to catch files that don't have the stamp
(condition-case nil
(progn
(my/set-file-time-final)
(save-buffer)
(setq updated (1+ updated)))
(error (setq skipped (1+ skipped))))))
(revert-buffer)
(message "Done! Updated: %d | Skipped (no stamp): %d" updated skipped)))
(defun my/set-file-time-final ()
"From Google AI summary session after Google search. Sets file time from header. Handles: Created YYYY-MM-DD Day HH:MM:"
(interactive)
(save-excursion
(goto-char (point-min))
;; 1. Search for 'Time-stamp' or 'Created'
(if (re-search-forward "\\(Time-stamp\\|Created\\):?" nil t)
;; 2. Match the date (YYYY-MM-DD)
;; Then skip any day-of-week (like Tue)
;; Then grab the time (HH:MM or HH:MM:SS)
(if (re-search-forward "\\([0-9]\\{4\\}-[0-9]\\{2\\}-[0-9]\\{2\\}\\)[^0-9]*\\([0-9]\\{2\\}:[0-9]\\{2\\}\\(?::[0-9]\\{2\\}\\)?\\)" nil t)
(let* ((date-part (match-string 1))
(time-part (match-string 2))
(ts-string (concat date-part " " time-part))
(parsed (parse-time-string ts-string))
(lisp-time (when parsed (encode-time parsed))))
(if (and (buffer-file-name) lisp-time)
(progn
(set-file-times (buffer-file-name) lisp-time)
(message "Success! Mtime set to %s" ts-string))
(error "Parsed '%s' but couldn't use it" ts-string)))
(error "Found keyword but date/time format was unexpected"))
(error "No 'Time-stamp' or 'Created' header found"))))
(defun my/dired-set-times-from-stamps ()
"From Google AI summary session. This calls the function my/set-file-time-final. In Dired, sync system modification times for all marked files
based on the 'Created' or 'Time-stamp' lines inside them."
(interactive)
(let ((files (dired-get-marked-files))
(updated 0)
(skipped 0))
(dolist (file files)
;; Open the file in a buffer without switching to it
(with-current-buffer (find-file-noselect file)
(condition-case nil
(progn
;; Call your working 'within-the-file' function
(my/set-file-time-final)
;; Save the buffer to ensure metadata is flushed to disk
(save-buffer)
(setq updated (1+ updated)))
(error
(setq skipped (1+ skipped))))))
;; Refresh the Dired buffer so you see the new dates immediately
(revert-buffer)
(message "Batch complete: %d updated, %d skipped (no stamp found)." updated skipped)))
(with-eval-after-load 'dired
(define-key dired-mode-map (kbd "T") 'my/dired-set-times-from-stamps))
Wednesday, March 18, 2026
Shinestacker for focus stacking
This is the first image I processed using Shinestacker. It's a remarkable and technically advanced piece of open source software. This software is beyond my skill level, but works incredibly well with defaults.
Sufficeth to say it was very simple, after a somewhat convoluted---but not difficult---installation on CachyOS, to process this stack of 40 images. I have a CPU with 27 or 28 processors; and this software even took advantage of my aging Nvidia GTX-1050 video card with a mere 3GB of video ram. 25X objective, mounted in UV-curing glass glue from a hardware store. Too bad about the detritus. Processing took a few seconds.
![]() |
| Ossicles of Holothuria atra mounted in UV-curing glass glue. |
Actually, Wayland is usable. I am leaning on Sway on my laptop.
Just to bring the conversation up to date.
Thursday, February 12, 2026
Wayland is not happening for me
Due to issues with HiDPI (High Dots-Per-Ince) on my Lenovo Thinkpad X1 Carbon, I wanted to try Sway and Hyprland, which were touted to handle HiDPI displays transparently. The original issue was mainly that my go to i3 tiling window manager does not pay well with HiDPI resolution. Text was unreadable for some apps.
It is true. Out of the box, Sway---especially installed as a complete distribution of Manjaro Sway Edition---worked nicely. Many key bindings were compatible with i3. In a day or two, I was up and running.
Along the way, I tried Hyprland, an overly decorated tiling option. Hyprland works really well. It was able to run applications like RawTherapee that did not work well for me on the Sway install. Even the flatpak of Entangle Photo Manager---an essential package for me---worked well. Not so for Sway. Today I found an application that does not work with Hyprland, either.
I have maintained i3 on my desktop linux box. It seemed ok to use either of the two Wayland options on my laptop; but jumping from system to system is too painful, when some apps don't work on one, but work fine on the other.
Wayland has some downsides, imho. Configuration is a little too nerdy.
When wayland first arrived on the scene, I wondered what could be so bad about X11 that these changes were needed. I'm getting tired of jumping through update hoops; that's why I quit Gentoo a long time ago. I now learn that Wayland, slick as it may be, is actually not a drop-in replacement for X11, which I am now used to.
Apparently Xwayland, often mentioned as a way to run X11 applications on Wayland machines, is not as simple to use as promised by Sway users. There are some other issues, that apparently X11 compatibility do not solve. I have not figured out how to configure Xwayland on Sway.
Goodbye, Wayland, at least for now. Maybe I'll try you again, someday. But why?
Thursday, February 5, 2026
Trying out Sway, an i3wm workalike for Wayland
A good move I recently made was to sell my MacBook Pro, M2; and purchase a Lenovo Thinkpad X1 Carbon, several years old. One of the best features of this new laptop is a HiDPI (High Dots Per Inch) screen with a resolution of something like 3200x1800. It's a remarkable display for other reasons, which I will not go into here. The blacks are incredible.
With my usual Manjaro i3wm, this means that the type is almost unreadable. With the guidance of several source on the Internet, I was able to cajol the system into somewhat useful settings that most software works fine with. Along they way, several references passed me by about Wayland, a newer graphical setup that X11.
I am reluctant to make huge changes to a long time stalwart system, but finally I have begun to experiment with Sway, a workalike system to i3, and Hyprland, a fancier tiling window manager, working on top of Wayland. Both, I am happy to report, work nicely with this HiDPI screen.
So I installed Manjaro's Sway edition. So far, so good. Now I'm at the point of trying to configure pop-up/drop-down floating windows for Kitty, Emacs, R, orage (probably impossible, but this is the best little calendar app I have found. Once I have set the month, and popped it back up, the same month is show. Very useful for calendar work), and a ham radio clock, that is actually of little use.
HiDPI is not a problem.
When I install a new distro, one of the first things I do is set the user id to "1004", as well as the groupid. Consequently, the home directory of my previous setup and user are completely accessible, because this was the case for the previous login as well. I never duplicate the login, out of worry that the dot file tweaks will be incompatible with anything different.
So far, so good.
Thursday, September 4, 2025
Tools of Excellence: Cb2bib, Yazi, Sioyek, Entangle, XnViewMP, Emacs,...: WOW!
In the summer of either 1982 or 1983, I enrolled in a summer school class at UCSB offered by the College of Engineering on Computer Architecture. At about this time two of my regular classes required the use of Wordstar, on a mainframe terminal. I had been required to write a program in Fortran for a math course; now, in this Computer Architecture class, I wrote some minimal code in PDP-1170 Assembly Language. Intel's early microprocessors---the engines that would spark a revolution in Personal Computing---had come into being. I had enrolled on a Pass/Fail basis, fearing that it would be a technical challenge. I had enrolled later in an amazing Invertebrate Paleontology course, also Pass/Fail. Both times, I would have earned an honest "A." Yet another Lesson learned.
The theory behind digital computers, as it turns out, is straightforward and fascinating, logical and understandable. I later came to realize that these systems, invented by humans, reflected human logic; they are non-complex, a fact I understood more fully after being introduced to Molecular Biology and Genetics, and the extreme complexity of the Central Dogma By the end of the short summer session, I had a tentative grasp of the nature of digital computers. The graduate student instructor took me aside and advised that the knowledge I had gained in this brief introduction would be valuable in the future, and I would be able to advise others about what computers can do.
This advice could not have been more applicable when I moved to Chuuk Lagoon, and started a project collecting animal names in local dialects of the islands. At the University of Guam Marine Lab, I was exposed to early Personal Computers, the IBM XT and IBM AT. My basic knowledge of the workings of computing systems provided useful perspective for solving problems. I eschewed the commercial/proprietary solutions, the high priced computer programs that would make the entrepreneurs wealthy.
I learned what I could and scrounged software of many kinds. Except the big brands. There are always other solutions that work better; those behemoths aren't worth the cost to society. I believed this then, and I believe it even more today.
My Toolbox
Sioyek
- A keystroke sends the text at the cursor to Google Scholar (GS), or another tool I am unfamilar with. A browser opens, Google Chrome. Keystrokes are available, either standard or by a plugin, to download the pdf from GS.
- Sioyek remembers bookmarks of two or three kinds. A keystroke causes display of a list of bookmarks in either the current file, or all pdfs sioyek knows about.
- One of these "bookmark" functionalites is called "highlighting." Selected text may be highlighted. The keystroke for highlighting must be followed by a single key, which represents the type of material. So someone like me, whose mind travels in so many directions, can keep track of various threads of interest. If several files are highlighted in this way, retrieval of highlights can optionally display all highlights of a given type in all files (globally).
- The Global retrieval feature holds for bookmarks as well. So if I am reading four PDFs that relate to each other, I can bounce around. And selections can be copied to the system clipboard. You know where this is going.
- Portals are something I don't yet understand. I position may be set as a target for a portal, so as I'm reading I can refer back to a certain specific piece of text, diagram, table, whatever. Backspace brings me home.
- I was able to print.
- Sioyek is mainly keyboard driven; but scrolling with a mouse is possible.
- A "visual mark" (or whatever it's called) underlines current text if that is wanted; and this mark can be manipulated in various ways. More to learn hear.
- Zooming is great.
- In PDFs text can be selected and various functions are possible. A click on a figure number will take me directly to that figure. This built-in feature seems almost intelligent, and it reminds me of snarfing references in Cb2Bib, a remarkable feature.
- Synctex mode allows the latex source to be opened and followed when reading a pdf. Wow.
Some thought went into this tool.
Yazi
Cb2Bib also automatically picks up citations that are highlighted in other programs. Also, one can copy a bibtex citation from Google Scholar, that is instantly picked up and incorporated into the database associated with the program.
This program does much more than I am able to understand, but what I can understand, and do---with the help of Pere Constans---is amazing.
Friday, July 25, 2025
Tangled in Entangle: resignation to flatpak
Entangle is a wonderful program, an elegant tool---elegant in the sense of efficiency and design for function. Daniel Berrangé has written other uncommonly interesting software as well. This tool, which I run on GNU/Linux, flawlessly connects to my Canon DSLR cameras; I use it primarily for photomicrography. What it lacks is documentation. The GUI is not super shiny, but adequate.
I have taken Entangle for granted for many years; it has installed easily on GNU/Linux Arch-based systems---via the AUR repository---and also on Ubuntu, as I recently learned. However, for several months it has been a struggle. On Manjaro GNU/Linux, my goto distribution for over a decade, building has been impossible, for me. Because Entangle is so important to me, I moved to EndeavourOS, a distribution that otherwise is not my favorite; Entangle did build fine on EndeavourOS, however. But recently, other issues plagued my EndeavourOS experience, initiating a devastating avalanche: my desperate flailings led to the loss of a 600GB partition, that had not been backed up except in some bits and pieces, with decades worth of work, now completely unrecoverable.
Monofilament fishing line sucks. Google's AI suggest some terms for snarls of monofilament on a reel: backlash, bird's nest, webbing, or wind knot. I have forgotten the more colorful term I knew long ago---explosion? I had to cut the mono off of the reel. (I no longer fish, out of concern for the health of the ocean, and overfishing). This week's avalanche is another lesson, because the entire journey was unnecessary, had I but taken heed of the notice on the web page of Entangle: flatpak is the method of choice for installing Entangle:
EndeavourOS
CachyOS
The Semi-Hard Way: Installing Archlinux
Ubuntu
Final Chapters
In Praise of Manjaro
Saturday, July 12, 2025
sioyek and yazi
I have set Sioyek as the default pdf viewer for Yazi; actually, probably for the entire system.
It was *relatively* simple to do this, after installing xdg-utils-mimeo. I will not go back through that here, but it's not hard.
Sioyek has no native capacity to print. This is a potential show stopper. I have attempted to set this up from instructions from some random internet post. The location of the user config files is in doubt, however. By "reports," config files should be found in ~/.config/sioyek; however, other reports indicate .local/share/sioyek. I did install a rather decrepid tool, a gtk-print tool (name?). My config does not work yet.
Another potential downside relates to the use case for Sioyek, as a pdf annotation tool for research. When a file is opened for the first time, sioyek indexes the file; this makes searches incredibly quick and useful. Will this result in cluttering the system after a large number of pdfs are opened? Probably another lightweight pdf viewer should be established as the default, to streamline the process of reviewing random files on the fly.
Sioyek is uncluttered, as far as GUI. There hardly is any GUI. A fairly extensive set of utilities is tied to keystrokes. Some of them are not exactly intuitive, at least to me.
Some facilities:
- Bookmarking
- Search in google scholar (may not work right)
- gg -> go to page 1
- G -> go to last page
- rt click -> mark line (not sure this is working with a track pad)
- highlighting in various colors
- search highlights
- "Smart Jumps" to figures or references, with or without links: this didn't work out of the box, for me.
- mark a location, give character as a name for the mark.
Yazi is turning out to be extremely useful. I use it multiple times a day. Some useful tweaks:
- set a much larger preview size, then
- install a preview to Toggle full view of the preview
- somehow a special tweak was needed to view tiffs (this wasn't the case when I first tried yazi)
- bookmarks. yabm (Yet Another Book Mark) is great. Another one was incompatible, AFAICT.
- Zoom plugin
- In a tips section of the web site, is recommended to install some code in the rc file of the shell, which allows to start with "y" and that leaves the terminal in the last used directory, when quit with "q". Extremely useful.
A problem: not really a big one: yazi is undergoing rapid and intense development, so incomptibilities arise frequently. Especially with plugins.
Some recent useful software additions
A brief list for now:
- dysk : concise "df" and graphic
- sioyek: interesting document reader. Keyboard driven, mostly, maybe. Designed for academic papers and textbooks.
- bpytop: A feature-ful process/memory/cpu monitor, text based; similar to top or htop.
Monday, May 19, 2025
Notes on Yazi
Yazi is good. Real good. I used it over ssh to cull a directory on my second system; it worked as I had hoped, except, perhaps, for color theming.
Knock on Wood.
Viewing/reviewing
One of the needs that yazi has fulfilled for me is rapid viewing. I can only imagine that should I ever be able to upgrade my current machines (RAM and CPU, as well as Storage), viewing would be even more friendly, especially for images. The ability to flip through a directory of images, mark, and move, copy, or delete marked files, has made a huge difference to my workflow. The only other tool that is useful in this regard is xnviewmp. I use a fairly simple set of commands; probably if I mastered tabs and other complexities and plugins, yazi would be even more helpful.
By the way, the terminal "kitty" has wonderful facilities built in to work well for viewing images. I prefer the black background and contrasty color scheme to any other.
Ranger was good enough, until it wasn't.
Copy, Paste and move and Notes on plugins.
[Cautionary note: I have lost files through carelessness here, and yazi has some gotchas to be navigated around.]
This is pretty much self-explanatory. I will try to address this topic in detail at some future time. For now, I'll mention a plugin that has helped speed these processes:
- yamb is a bookmarking plugin that works well. In the absence of a much needed multi-step backup command, this does a good job when sorting through files and moving or copying them to another directory. I have gotten around the mentioned limitation by defining bookmarks for the current from directory, and the currently interesting goto directory, I define a set of book marks to frequently used directories, as well. This is an easy tool to master. Like other plugins, issues have been experienced after updating yazi (it is under fairly intense development).
- toggle-pane: This helps when viewing both pdfs and images. It is possible to configure the mazimum size of displayed images (I'm not certain whether this works for pdfs) by putting this code into ~?.config/yazi/yazi.toml:
[preview]
# Change them to your desired values
max_width = 1800
max_height = 1800
Plugins are found on a resources link on yazi's web pages. Other sites exist with plubins.
Filtering
Filtering is a wonderful way to sort. It has been even more useful to me, because of a filenaming scheme I have adopted. I stole this idea from Protesilaos's Denote system. I have not found denote very useful, but the concept of tags at the end of the filename, before the extension has become a useful tool allowing me to sort files more rapidly. Here is an example.
Jones--2060--JargonInBiology__taxonomy_nomenclature_zoology.pdf
I have started avoiding underscores in filenames ("_") in favor of using them in tags. Interestingly, I saw a web page or thread somewhere about tagging styles, and this is one of several. I used to use a 10 (or so) character at the beginning of lines in a bibliography, where each position had a meaning. So anything related to crabs would have "c" in the third position (12ctx8urt-Anon-Crabs of the world) would be sorteable by sorting by the third position. The Unix (GNU/Linux) sort command worked excellently.
With filtering in yazi, one can narrow down a large folder/directory with pdfs about taxonomy: "_taxonom". Prot has demonstrated the use of regular expressions to sort even more specifically in, I think emacs dired. To avoid filtering for "_" in filenames, one would theoretically use a regular expression requiring a "__" (double underscore) somewhere before the "_:" single underscore. This is probably easy. Filtering is easier, I think. It may be that emacs would be better, but so far, aside from a couple of learning experiences, Yazi is working well.
Moving around
In either the getting started or tips section of the yazi main web pages, is a suggestion that makes yazi more useful.
Inserting this code into .bashrc (and I think .zshrc as well) makes things easy.
function y() {
local tmp="$(mktemp -t "yazi-cwd.XXXXXX")" cwd
yazi "$@" --cwd-file="$tmp"
if cwd="$(command cat -- "$tmp")" && [ -n "$cwd" ] && [ "$cwd" != "$PWD" ]; then
builtin cd -- "$cwd"
fi
rm -f -- "$tmp"
}
Then, when in a terminal, type "y" to start yazi. After moving to another directly, quitting with "q" leaves the terminal in this new directory.
A Caution or Two
Plugins are often not mutually compatible. I have tried several others, but some collided with these few i do use.
Some plugins iexplicably use keybindings that are assigned to other functions by default, and it is not always apparently what key bindings may be used. <F1> may display a help screen, which may be filtered. Filtering rocks. Bookmarks rock.
2025 May 19
How I got into Emacs (and Free Software)
This is a long tale, not confined to Emacs alone. This is, indeed, a story about why I am a confirmed Free Software advocate. This has been...
-
I have started running the i3 window manager on my Linux boxes. I have installed Manjaro on both. One of them is running Manjaro's i3 ...
-
I have been using Manjaro for years, now. Every so often I contemplate installing Arch, which I like, which is not polluted by Manjaro-spe...

