When everything is interpreted it all works fine because ‘consult’ is loaded
before the ‘with-eval-after-load’ part is run, but when byte compiling the byte
compiler doesn't know that ‘consult-customize’ is a macro unless ‘consult’ is
loaded, which it isn't when Guix compiles it.
When it's byte-compiled as if it's a function ‘consult-buffer’ is assumed to be
a variable that's passed in, so I'm guessing it's trying to dereference it first
before passing it on to a non-existent function? But of course ‘consult-buffer’
is only a function (Emacs Lisp is a Lisp-2 after all), so it fails, but only
when byte compiled (and even only when byte-compiled in a clean environment
where there are no packages loaded that aren't explicity said to be).
Hopefully this fixes my issue with being unable to switch buffers until I
explicitly load ‘consult’.
This reverts commit 961651e575.
It works in an interactive session, but still fails while starting up. Probably
has to do with autoloads not having finished loading yet, perhaps?
This macro seems to work fine when expanded at run-time even when ‘consult’
hasn't been loaded, but it doesn't work after it's been byte-compiled... Perhaps
putting it in the top-level will help. I'm wondering if somehow the byte
compiler closes over a reference to ‘consult-buffer’ during compilation that's
not available when it executes?
In the Groovy used with Jenkins it seems quite common for there to be top-level
functions that aren't explicitly in classes (they still are implicitly).
The ‘get-multifile-module-version’ and ‘get-module-version’ functions open up
the given Emacs Lisp file and search for a “Version” header, parses it out, and
then returns the file name of the module as it should look in the package
archive.
I'm working on moving my build setup to my own laminar[1] instance. To do this I
need to be able to package files up. It appears that I couldn't quite get Cask
to work, and Eldev exists in the Guix[2] package repository.
[1]: https://laminar.ryuslash.org/
[2]: https://guix.gnu.org/
I'm having some issues with my ‘consult-buffer’ setup and I'm hoping that
putting this in its own function will help me debug the issue, or at least show
me if this is part of the issue or not.
The various ‘M-<NUMBER>’ keybindings are all also bound to ‘C-<NUMBER>’, no need
to have both, and using ‘M-0’ is a lot easier than using ‘C-x 0’. This also
replaces the old keybindings with a message that tells me to use the new
keybindings instead to help me learn.
Don't load the user init file while building my Emacs packages, make sure to use
a different ‘package-user-dir’ so that bad packages don't interfere and it
doesn't accidentally work because of existing packages. Specify the
‘package-archive-upload-base’ in the Makefile so that there is only one place to
look and modify if this needs to move. Ensure that the
‘package-archive-upload-base’ exists before uploading to it.
This also happens to include changes to the font for Eshell as an experiment and
setting the page delimiter so page navigation commands work on prompts.
Instead of adding a lot of tags and adding a lot of agendas filtering on them
I'm experimenting with using org-edna to make certain contexts a dependency of a
task to filter them out of my todo list.
Current contexts I'm experimenting with are:
- ‘day-of-week?’ to filter out tasks that I can only do on certain days.
- ‘night-time?’ to filter out anything that I can't do in the evening. Usually
having to do with contacting others.
- ‘business-hours?’ to filter out anything that is outside of a certain
timezone's “business hours”, defined by me as anywhere between 9am and 6pm.
‘paredit-mode’ appears to have added keybindings for ‘C-j’ and ‘RET’ that
weren't there before (or did I enable ‘paredit-mode’ in IELM recently?) and that
interfere with executing code.
This way of removing the keybindings works in a buffer-local only way so that in
other buffers the ‘RET’ and ‘C-j’ keybindings remain untouched.
First: the match needs to be any entry that does match the names of the people
whos blogs I already follow.
Second: The search regular expression can't contain spaces. It seems to be the
same as any search query. So when a regular expression contains a space it's
considered two different search terms. This doesn't work when we're searching
for one option with a space in it (“Irreal” or “Sacha Chua” or “Andrea”) since
the syntax for the regular expression gets all messed up. Quickest workaround is
to match any whitespace instead.
Instead specify a width for the column and shrink the table. This way it still
gets truncated, but it can be expanded and the whole text is in the column.
These function help me make sure that I'm properly going through both files. The
command ‘oni-org-run-through-inbox’ will first dump any items in the tickler
file that are relevant for today and then it goes through each item in my inbox
and asks me to take an action on them.
This helps me both go through my inbox more easily, but also helps me keep track
of the items in my tickler file, which has been something I keep forgetting to
look at.
The ‘oni-org-dump-tickler’ command should be idempotent, so calling it multiple
times per day shouldn't mess with the different dates in the file. If it
discovers that the current day isn't the same as today it keeps going through
the tickler file, dumping any tasks it finds into the inbox, until it finds the
right day number. It's not aware of any of the months, so it'll happily move to
the next month if your tickler file is in the wrong state. Also if your tickler
file hasn't been updated in more than a month it also doesn't understand that it
needs to keep going and will keep presenting you with old tasks.
It's a fun idea, but practically it makes things a lot slower in certain
situations and by default it has some weird concepts of what safe or pure
functions are.