Markdown bookmarklets in the browser

Copy the current URL as a markdown link:

javascript:(function(){navigator.clipboard.writeText('[' + document.title + '](' + document.location.href + ')').catch((error) => { alert(`Copy failed! ${error}`); }); })();

Copy the current Outlook.com email as a markdown link:

javascript:(function() { navigator.clipboard.writeText('[Mail: ' + document.getElementsByClassName("allowTextSelection")[0].title + '](https://outlook.office365.com/owa/?ItemID=' .concat(window.location.href.split("/id/")[1]) .concat('&exvsurl=1&viewmodel=ReadMessageItem') + ')').catch((error) => { alert(`Copy failed! ${error}`); }); ;})()

These bookmarklets are useful to copy links into your Markdown editors such as Logseq, Obsidian, Joplin, etc.

Logseq query exclude templates

Assuming you’ve put your templates on a page named “templates”, use this as part of your :where:

...
[?b :block/page ?bp]
[?bp :block/name ?pn]
[(not= ?pn "templates")]
...

Logseq query to find all references to a block

There are plenty of examples of how to query all references to a page, but I found no examples how to do such a thing for blocks.

This is a method that I found that works, but there may be better ways:

#+BEGIN_QUERY
{
:title [:b "Links to block" ]
:query [:find (pull ?b [*])
:where
[?b :block/refs [:block/uuid #uuid "659ac433-b189-49b7-8601-d04338d2dd5e"]]]
}
#+END_QUERY

Replace the UUID with the UUID of your block (easily found when copying the reference to the block).

Sharing pages between local logseq graphs using Syncthing on Linux

This post addresses how to keep two directories in sync on a single Linux machine using Syncthing (avoiding things like rsync, unison, etc.). This is particularly useful if you have two logseq graphs on your system and you want to share a directory underneath your pages directory between both.

Setting up the mount

  • Requirements:
    • util-linux v2.39
  • Preparation:
    • sudo useradd -m USERNAME_helper
    • Make note of the user id and group id (usually they are the same number)
  • Testing the mount one-time:
    • sudo mount --bind -oX-mount.idmap=b:1000:1001:1 /home/USERNAME/shared_logseq /home/USERNAME_helper/shared_logseq
    • This assumes your main user has uid/gid 1000 and the helper account has uid/gid 1001
    • If the target directory does not yet exist, create it first
    • If this works correctly, you can unmount it and start setting up the permanent mount as follows
  • Setting the mount permanently in /etc/fstab:
    • /home/USERNAME/shared_logseq /home/USERNAME_helper/shared_logseq none defaults,user,bind,X-mount.idmap=b:1000:1001:1 0 0
    • The b flag creates both user and group mapping
    • Mount the directory: sudo mount /home/USERNAME_helper/shared_logseq

Setting up Syncthing

  • Let systemd launch an extra syncthing permanently:
    • sudo systemctl enable --now syncthing@USERNAME_helper
  • Check the logs and find the port number used by syncthing:
    • sudo systemctl status syncthing@USERNAME_helper
  • Open the syncthing with a browser and configure it to disable NAT, global discovery and relays
  • Connect your Syncthing instances together as usual, and share the folders between the syncthing instances

Git tip: see all commits introduced by a merge

Git has the useful function git log --first-parent that will show your branch without the commits introduced by merge commits. Sometimes I want the opposite (i.e., understand which commits were added by a merge), and there I find the following command useful: git log ^HEAD^ HEAD. This command will print the commits that are not (an ancestor of) the commit on your branch before the merge commit. Effectively, it will only show the commits brought in by the merge commit.

A more succinct but less readable version is git log ^@^ @ .