Skip to content

Instantly share code, notes, and snippets.

def find_free_port(candidates=[]):
for p in (candidates + [0]):
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
try:
s.bind(('localhost',p))
return s.getsockname()[1]
except Exception:
logging.info(f"Could not bind to port {p}. Trying another")
port = find_free_port([5001,5010,5100])
@algal
algal / openjup.py
Last active October 2, 2024 19:00
Python script to open a notebook in your local browser, no matter where the server or notebook is
#!/usr/bin/env python3
import os, os.path, sys, urllib.parse, base64, subprocess
def on_iterm2(): return 'ITERM_SESSION_ID' in os.environ or os.environ.get('LC_TERMINAL','') == 'iTerm2'
def on_macOS(): return sys.platform == 'darwin'
def on_remote_host(): return 'SSH_CLIENT' in os.environ or 'SSH_TTY' in os.environ
def openurl(url):
@algal
algal / term-iterm2.el
Created May 5, 2024 22:33
Make emacs see all keystrokes in TTY mode with iTerm2
;; This package makes changes to how emacs interprets CSI escape codes, so that
;; it better understands "CSI u"-style codes, so that more key chords pass
;; through to emacs in terminal mode.
;;
;; It is intended to work with the following terminal confugration:
;;
;; - iTerm2 / Keys / Report modifiers using CSI u: enabled
;; - iTerm2 / Keys / xterm control sequences can enable modifyOtherKeys mode: enabled
;; - iTerm2 / Terminal / Report Terminal Type: xterm-direct
;;
@algal
algal / pick.py
Last active May 1, 2024 16:42
pick
#!/usr/bin/env python3
import sys
import re
from collections import deque
def usage():
print("Usage: {} [--onebased | -o | -u] ROW COLUMN".format(sys.argv[0]))
print("")
@algal
algal / Claude.sh
Last active March 7, 2024 19:37
Calls Anthropic's claude-3-opus, passing in the command-line argument as the prompt.
#!/usr/bin/env bash
if [ "$#" -eq 0 ]; then
echo "Usage: $(basename "$0") promt_to_send_to_claude"
echo ""
echo " Requirements: ANTHROPIC_API, defined; jq and curl, installed; bash, version 3 or higher."
exit 1
fi
function claude() {
local json_request
@algal
algal / dateify
Last active February 7, 2024 07:49
Rename a file to prefix with its creation date, or undo this. Makes file match the Denote file-naming scheme
#!/bin/bash
# compatibility: works on Debian 12, macOS Sonoma, and in Linux-simulating shell environments in macOS.
# Function to display usage message
usage() {
echo "Usage: $(basename "$0") [OPTION]... [FILE]..."
echo
echo "Rename files by adding or removing a date-time prefix"
echo "in the following format yyyymmddThhmmss--"
@algal
algal / p.sh
Created January 22, 2024 17:31
bash script to query perplexity.ai
#!/usr/bin/env bash
# based off of https://gist.github.com/rauchg/c5f0b1dc245ad95c593de8336aa382ac?permalink_comment_id=4842642#gistcomment-4842642
if [ "$#" -eq 0 ]; then
echo "Usage: $(basename $0) promt_to_send_to_perplexity"
echo ""
echo " Requirements: PERPLEXITY_API, defined; jq and curl, installed; bash, version 3 or higher."
exit 1
fi
function p() {
@algal
algal / run-with-emacs
Last active September 6, 2022 17:25
Boilerplate to write a command line script in emacs lisp
:;exec emacs --no-init-file --no-site-lisp -script "$0" -- "$@" # -*- mode:emacs-lisp -*-
(defun main ()
(require 'cl-lib)
(let ((script-name (nth 2 command-line-args))
(args (cdr command-line-args-left)))
;; assert: ARGS now is a possibly empty list of command line args to the script
;; check for valid arguments here
(when (not args)
(princ (format "usage: %s PATH_TO_FILE" script-name))
@algal
algal / binomial.py
Created May 29, 2021 22:42
binomial coefficients with dynamic programming
# binomial coefficients
"""
Recurrence relation:
C(n,k) is the count of all k-subsets in a set of n items.
C(n,k) = C(n-1,k-1) + C(n-1,k)
Intuition underlying the relation:
1. pick any item from the n-set, call it the special item.
2. Every k-subset either includes the special item or does not.

24 bit color in emacs, under Blink.sh

What's the problem?

The normal way to enable 24 bit color on a recent emacs (27.1) and a recent OS distribution (one which already has the terminal type definition xterm-direct), is just to set TERM=xterm-direct before running emacs.

But this does not work with blink.sh, probably because of some incompatibility in its underlying library, hterm.

What's the solution