Recent Changes

Updates since 2018-10-15 01:51 UTC

1 | 3 | 7 | 30 | 90 days
List all changes Include rollbacks Include minor changes
List later changes RSS RSS with pages RSS with pages and diff


  • 19:47 UTC (new) (history) 2019-04-21 Easter 2019 . . . . Marcin Borkowski This is the night, when once you led our forebears, Israel’s children, from slavery in Egypt and made them pass dry-shod through the Red Sea. This is the night that with a pillar of fire banished the darkness of sin.


  • 20:39 UTC (new) (history) 2019-04-15 How to make a menu in Emacs . . . . Marcin Borkowski As we all know, Emacs is so much more than just a text editor. There are quite a few serious applications written on top of it, like Org-mode or mu4e. And many applications – including those two – contain menus (the mu4e main menu or Org-mode’s exporting menu).



  • 19:47 UTC (new) (history) 2019-04-01 A trick with Git merging . . . . Marcin Borkowski I often have a pull request on BitBucket to review and merge, and – as an Emacs user – I find BitBucket’s UI less than ideal. On the other hand, I don’t want to merge only locally and push, since I want BitBucket to generate the merge commit messages, close the PRs etc. Today, I found a neat way to solve this problem.



  • 20:42 UTC (new) (history) 2019-03-18 Free Emacs key bindings . . . . Marcin Borkowski As we all know, most Emacs users customize Emacs in various ways. Usually, at some point in time, the built-in customization options cease to suffice. Then you proceed to writing your own functions and commands. Then, you want to bind them to some keys. The purpose of this post is to list some default Emacs bindings which may be useless for some people, and so could be reused as command-invoking or even prefix keys.


  • 21:05 UTC (new) (history) 2019-03-11 Name-based UUID generation . . . . Marcin Borkowski Some time ago, I had a very specific need. I had some data which had to be anonymized before sending somewhere. For example, assume that you have a CSV file with people’s names in one column, and some (possibly sensitive) data in the rest of the columns. I’d like to change all the names to some (pseudo)random stuff, but with the caveat that if some name appears more than once, it should be changed to the same thing every time.


  • 10:43 UTC (new) (history) 2019-03-03 org-todo-yesterday . . . . Marcin Borkowski I often run my org-agenda in the morning only to see a task I completed yesterday marked as TODO (but forgotten to be marked as DONE). Often I don’t care about the exact date I completed the task, but sometimes I do, and then org-todo-yesterday comes into play.


  • 07:17 UTC (new) (history) 2019-02-24 Transferring strings to a phone via QR codes . . . . Marcin Borkowski Sometimes I need to transfer some text (a link, a short note or something else) from my computer to my phone. A usual way is to send it via some cloud-based service – but I don’t really like it, since there is no such thing as cloud – only other people’s computers. While I am not rigorously opposed to such an idea, I do not like putting my personal stuff on somebody else’s machine without any good reason. Another way is to email the thing – but I do not have an email client configured on my phone, and I really want it to stay that way. (I consider email to be a crucial part of my privacy/security. Having it on my phone puts me at significant risk – phones like to be stolen or lost, for instance.) A few days ago, an idea of using QR codes came to my mind.





  • 04:46 UTC (new) (history) 2019-02-04 A simple template mechanism in Elisp . . . . Marcin Borkowski A long time ago I asked on the Emacs mailing list about a templating mechanism for Emacs Lisp. Of course, there is format. However, I don’t like it as a template engine, since the entries are identified by their order and not names. Then, there is YASnippet and skeleton.el, but they are (probably) better suited for interactive use. (At least Yasnippet can be used programmatically, but it seemed to be too complicated for my needs anyway back then.) Some people suggested other solutions, none of which really appealed to me. So, I set out to write my own.



  • 19:47 UTC (new) (history) 2019-01-20 Filling and version control . . . . Marcin Borkowski It has been said a lot of times that when writing some (natural language) text with version control in Emacs, filling is a bad idea. Any change involving adding or deleting a significant number of characters and then refilling can result in all subsequent lines in a paragraph changed, and the diff looks really ugly then. The solution usually proposed is putting each sentence on a separate line, and then just use visual-line-mode to wrap your lines on the screen without putting any hard newlines in. Well, I sort of dislike this idea.


  • 05:23 UTC (new) (history) 2019-01-14 Some Org Agenda keybindings . . . . Marcin Borkowski This post is just a friendly reminder that it may be a good idea to look in the manual from time to time, just in case there are some gems hidden there you don’t remember (even if you read it once). It turns out that you can do a lot of things from the Org Agenda buffer.





  • 11:46 UTC (new) (history) 2018-12-16 A simple tip on using destructive functions . . . . Marcin Borkowski This is something fairly obvious to every seasoned Lisp programmer, but let’s not forget that there are novices, too. Many Elisp functions are noted to be “destructive”, which means that they can change their arguments. For instance, if you want to sort a list, you may use the sort function, which is said to modify its argument by side effects (this is exactly what “destructive” means). This does not necessarily mean, however, that after executing (sort some-list), the variable some-list will magically contain a sorted version of it previous self! Let’s consider two examples.




  • 16:56 UTC (new) (history) 2018-11-26 format-seconds . . . . Marcin Borkowski If you’ve ever done anything UI- and time-related in Elisp (or whatever language), chances are that you did stuff like (defun format-minutes (minutes) "Format MINUTES in a human-friendly way."


  • 08:38 UTC (new) (history) 2018-11-19 Font-locking diff blocks in Org-mode . . . . Marcin Borkowski I sometimes miss a feature in Emacs where I could make a diff of two files (using Emacs built-in dired-diff command, bound to = in Dired, or abo-abo’s diff trick, which I have bound to e in Dired), but have the diff persist (as in, save it to a file). Technically, I can do this, of course, by just calling write-file and saving it to a file (preferably with a .diff extension so that it will open in Diff mode automatically), but sometimes I prefer to save things in my Org-mode file, along with my notes related to the project I’m working on. It turns out that Org-mode has me covered, although there is one minor caveat here.


  • 21:13 UTC (new) (history) 2018-11-11 Poland gained independence 100 years ago . . . . Marcin Borkowski Today we [[|again]] [[|depart]] from the usual topics of my blog. We have a very important day today in Poland – [[|one hundred years ago my country gained independence]] after more than a hundred years of political nonexistence.



  • 14:46 UTC (new) (history) 2018-10-27 Launching terminal in current directory . . . . Marcin Borkowski I am a bit ashamed that I do not always use Eshell – I sometimes rely on a “proper” bash in a terminal. (One possible reason is when I ant to run something that does not play too well with Eshell, like top or watch. I know it is possible to do that in Eshell, using eshell-visual-commands, but it seems I’m too lazy (or still too much accustomed to my usual terminal) to change that. Anyway, it is feasible to want to run a terminal (or any other program) in the current directory from Emacs. It turns out that it is easy to do using async-shell-command.


  • 11:48 UTC (new) (history) 2018-10-22 Running visual commands in Eshell . . . . Marcin Borkowski It is a known thing that running commands that control the terminal like top in Eshell is problematic – Eshell plays well with commands that take stdin in and put stdout out, but any control codes are just displayed verbatim. Happily, there is a way around it.