Skip to content

Instantly share code, notes, and snippets.

View Caellian's full-sized avatar

Tin Švagelj Caellian

View GitHub Profile
@Caellian
Caellian / apply.rs
Last active September 23, 2023 01:30
Apply mutates a value using a closure and then instantly returns it. This is useful for handling Ok/Some case in scenarios where type can be either Result/Option<T> or T directly, based on another type generic, but that requires `specializatation` feature.
pub trait Apply {
type ValidValue;
fn apply(self, consumer: impl Fn(&mut Self::ValidValue)) -> Self
where
Self: Sized;
fn apply_ref(&mut self, consumer: impl Fn(&mut Self::ValidValue)) -> &mut Self;
}
default impl<T> Apply for T {
@Caellian
Caellian / expanded.rs
Created September 7, 2023 09:06
Ping pong expanded
#![feature(prelude_import)]
#[prelude_import]
use std::prelude::rust_2021::*;
#[macro_use]
extern crate std;
use litesim::prelude::*;
pub struct Player;
#[cfg(feature = "rewind")]
impl<'s> RewindModel<'s> for Player {
type RewindBackup = Self;
@Caellian
Caellian / line-clamp.scss
Last active August 7, 2023 17:03
Text ellipsis and line clamping
p {
display: inline-block; // fallback for CSS4
display: -webkit-inline-box; // specialized renderer supported by all major browsers
-webkit-box-orient: vertical; // Required by FF for -webkit-line-clamp
-webkit-line-clamp: 1;
line-clamp: 1; // Forward CSS4 support
font-size: var(--size);
line-height: calc(var(--size) * 1.2); // leave wiggle room for descending characters (e.g. jy...)
overflow: hidden; // required for ellipsis
@Caellian
Caellian / useEffectEach.js
Last active July 24, 2023 01:46
React useEffect that works on iterables.
/**
* Behaves like useEffect, but the hook function recieves changed iterable values as an argument.
*
* @param {(changed: any) => ((changed: any) => void)} call
* @param {Iterable} iter Primary dependency and iterable that's operated on
* @param {any[]} dependencies Additional dependencies
* @param {(a: any, b: any) => boolean} matcher Equality comparator used for comparing previous and new values, dequal (deep-equal) by default
*/
export function useEffectEach(call, iter, dependencies = [], matcher = dequal) {
@Caellian
Caellian / Svelte Tabs Component.md
Last active July 18, 2023 16:49
A rounded tab picker component in Svelte

preview

@Caellian
Caellian / view.css
Created May 22, 2023 13:44
Obsidian dictionary view
.dictionary-view {
display: contents;
}
.dictionary-view * {
box-sizing: border-box;
padding: 0;
margin: 0;
}
.dictionary-view .search-bar {
@Caellian
Caellian / list_project_times.py
Last active April 27, 2023 21:34
ActivityWatch client script that queries VSCode events and shows time spent on projects
#!/usr/bin/env python3
from time import sleep
from datetime import datetime, timedelta, timezone
from dateutil.parser import isoparse
from aw_core.models import Event
from aw_client import ActivityWatchClient
# Server settings
@Caellian
Caellian / grammar.md
Created February 4, 2023 16:11
ChatGPT lowkey good for learning grammar

You

Explain why the following sentence is wrong: "Estoy esperando dar a luz pronto a un bebé"

ChatGPT

The sentence "Estoy esperando dar a luz pronto a un bebé" is grammatically incorrect. The correct sentence would be "Estoy esperando dar a luz pronto a mi bebé" or "Estoy esperando dar a luz a un bebé pronto." In Spanish, it's more natural to say "dar a luz" instead of "tener un bebé."

You

Why? Can you explain those phrases in English?

@Caellian
Caellian / match_os.rs
Last active November 12, 2022 03:10
Rust match target_os macro
/// Match target_os compile time constant.
///
/// Usage:
/// ```
/// match_os! {
/// "windows" => println!("hello from windows"),
/// "linux" | "macos" => {
/// println!("hello from unix")
/// },
@Caellian
Caellian / color.ts
Last active August 18, 2021 05:10
Color Lib
/*
* Copyright © 2021 Tin Švagelj <[email protected]>
*
* Permission is hereby granted, free of charge, to any person obtaining a copy of this
* software and associated documentation files (the “Software”), to deal in the Software
* without restriction, including without limitation the rights to use, copy, modify,
* merge, publish, distribute, sublicense, and/or sell copies of the Software, and to
* permit persons to whom the Software is furnished to do so, subject to the following
* conditions:
*