Skip to content

Instantly share code, notes, and snippets.

Avatar

Sean Hammond seanh

View GitHub Profile
@seanh
seanh / vimgrep.md
Last active Oct 26, 2021
vimgrep cheatsheet
View vimgrep.md

vimgrep

  • Vimcasts on vimgrep

  • Uses native vim regexes (which are slightly different from the regexes used by grep, ack, ag, etc) so the patterns are the same as with vim's within-file search patterns.

    You can do a normal within-file search first, then re-use the same pattern to

@seanh
seanh / html_tags_you_can_use_on_github.md
Last active Oct 25, 2021
HTML Tags You Can Use on GitHub
View html_tags_you_can_use_on_github.md

HTML Tags You Can Use on GitHub

Wherever HTML is rendered on GitHub (gists, README files in repos, comments on issues and pull requests, ...) you can use any of the HTML elements that GitHub Flavored Markdown (GFM) provides syntactic sugar for. You can either use the syntactic sugar that GFM (or other GitHub-supported markup language you're using) provides or, since Markdown can contain raw HTML, you can enter the HTML tags manually.

But GitHub also allows you to use a few HTML elements beyond what Markdown provides by entering the tags manually, and some of them are styled with CSS. Most raw HTML tags get stripped before rendering the HTML. Those tags that can be generated by GFM syntactic sugar, plus a few more, are whitelisted. These aren't documented anywhere that I can find. Here's what I've discovered so far:

<details> and <summary>

A `<detai

@seanh
seanh / gist:232822
Created Nov 12, 2009
Create a dict-like object with DictMixin (Python)
View gist:232822
"""How to create a custom mappable container (dictionary-like) type in Python."""
from UserDict import DictMixin
class MyDict(DictMixin):
# MyDict only needs to implement getitem, setitem, delitem and keys (at a
# minimum) and UserDict will provide the rest of the standard dictionary
# methods based on these four.
#
# getitem and delitem should raise KeyError if no item exists for the given
@seanh
seanh / user_stories.md
Last active Oct 8, 2021
My notes on user stories
View user_stories.md

User Stories

Reading list

  • [Mark Shead: Creating Good User Stories][Mark Shead]
  • [GOV.UK Service manual: Writing user stories][GOV.UK]
  • [Mike Cohn's blog posts about user stories][Mike Cohn]
  • [Mike Cohn: User Stories Applied (book)][User Stories Applied]
@seanh
seanh / formatFilename.py
Created Apr 11, 2009
Turn any string into a valid filename in Python.
View formatFilename.py
def format_filename(s):
"""Take a string and return a valid filename constructed from the string.
Uses a whitelist approach: any characters not present in valid_chars are
removed. Also spaces are replaced with underscores.
Note: this method may produce invalid filenames such as ``, `.` or `..`
When I use this method I prepend a date string like '2009_01_15_19_46_32_'
and append a file extension like '.txt', so I avoid the potential of using
an invalid filename.
@seanh
seanh / detect-broken-symlinks.py
Created Nov 8, 2009
A Python script to check for broken symlinks in the current working directory. I use this as part of a pre-commit hook with git.
View detect-broken-symlinks.py
@seanh
seanh / README.md
Last active Mar 27, 2021
My ZSH prompt in Python
View README.md

My ZSH prompt in Python, with:

  • A horizontal rule (as wide as the terminal) before each prompt (when scrolling this makes it easier to see where one command's output ends and the next command begins)
  • Nicely truncated current working directory (like fish shell)
  • Active virtualenv
  • Git branch
  • Non-zero exit status
  • user@host only if connected over ssh
@seanh
seanh / netrw.md
Last active Feb 15, 2021
Netrw Cheatsheet (Vim's Built-in Directory Browser)
View netrw.md

Netrw Cheatsheet (Vim's File Browser)

See also:

  • vinegar.vim, which makes - open netrw in the directory of the current file, with the cursor on the current file (and pressing - again goes up a directory). Vinegar also hides a bunch of junk that's normally at the top of netrw windows, changes the default order of files, and hides files that match wildignore.

    With vinegar, . in netrw opens Vim's command line with the path to the file under the cursor at the end of the command. ! does the same but also prepends ! at the start of the command. y. copies the absolute path of the file under the cursor. ~ goes to your home dir. Ctrl+6 goes back to the file (buffer) that you had open before you opened netrw.

To launch netrw:

@seanh
seanh / mergelog.py
Created Apr 25, 2010
A custom merge driver for git, for automatically merging my 'log.txt' file in a simplistic way.
View mergelog.py
#!/bin/env python
"""mergelog
This is a custom merge driver for git. It should be called from git
with a stanza in .git.config like this:
[merge "mergelog"]
name = A custom merge driver for my log.txt file.
driver = ~/scripts/mergelog %O %A %B %L
recursive = binary
@seanh
seanh / gist:232828
Created Nov 12, 2009
List all the files in a directory with a one-line list comprehension (Python)
View gist:232828
# http://www.diveintopython.org/file_handling/os_module.html
# Use a one-line list comprehension to get all the files in a given directory with a given extension.
import os
dir = '.'
ext = '.txt'
txt_files = [f for f in os.listdir(dir) if os.path.isfile(os.path.join(dir,f)) and f.endswith(ext)]
# os.path.join joins a directory and a filename into a path. You can also split a path name into directory and file with
# os.path.split(), and you can split a filename with extension into filename and extension with os.path.splitext()