How to discover and search tmux key bindings?
Every key binding, with a note, from Ctrl-A ? or from the shell with list-keys; list-commands gives the syntax and flags of every command.
unfinished thoughts on code, technology, music and everything else
Every key binding, with a note, from Ctrl-A ? or from the shell with list-keys; list-commands gives the syntax and flags of every command.
Open the command prompt with Ctrl-A : and type any tmux command without the leading tmux word: the interactive twin of the CLI, on the server you are attached to.
source-file re-reads ~/.tmux.conf into the running server, so a changed setting takes effect without killing tmux. Bind it to a key to reload after every edit.
tmux ships five preset layouts. Cycle them with Ctrl-A Space, or name one to select-layout, tiled included for an even grid in one step.
swap-pane exchanges two panes without touching the layout: the cells stay put, the panes trade places. Use Ctrl-A { or Ctrl-A } for the neighbours.
join-pane and move-window accept a source in another session of the same server, and the process running in the pane is re-parented, not restarted. A server started in a throwaway session lands in your main workspace without going down.
Relative targets like down-of name a pane by its position, no index lookup. join-pane -h -s picks the pane below the active one and re-attaches it to the right: a stacked pair becomes side by side in one command.
join-pane detaches a pane from wherever it lives and re-attaches it as a split in the current window, processes included. break-pane does the exact opposite: it sends a pane off to its own window.
Mark a pane with Ctrl-A m and the {marked} target resolves to it from any window or session, so a swap or a join needs no index juggling.
tmux window targets accept special tokens for the first, last, previously active, next and previous windows, with one-character aliases. They keep scripts independent of actual index numbers.
A bare number in a tmux pane target means a pane of the current window when that pane exists, otherwise a whole window, and it flips silently. Qualify with window.pane, a pane id, or a window name.
Windows and panes start at 0 by default, so the leftmost one sits under a key at the far end of the keyboard. Set base-index and pane-base-index to 1 in ~/.tmux.conf so key 1 selects the first one.
The mouse is off by default. Add set -g mouse on to ~/.tmux.conf, then drag to select and copy into the tmux buffer. Hold Shift to fall back to the terminal's own selection.
Use resize-pane with -L/-R/-U/-D to push a border by N cells, or -x/-y to set an exact size. A resize only works when there is a neighbour to trade space with.
Press Ctrl-A z to expand the active pane to the whole window, and again to restore the split. Nothing closes, it is a temporary toggle.
Press Ctrl-A ; to toggle focus between the current pane and the one you were on just before, the pane-level twin of Ctrl-A l for windows.
Use Ctrl-A then an arrow key for directional focus, Ctrl-A o to cycle panes, and Ctrl-A q to jump by number.
Use monitor-activity to flag a window when output appears, or monitor-silence to flag it when output stops, so you can watch a long job from another window.
tmux renames windows after the running program by default. Turn automatic-rename off to keep the names you set.
Repack tmux window indexes to 0, 1, 2 with move-window -r, or set renumber-windows on to do it automatically.
Swap two tmux windows with swap-window, or move one to another index with move-window.
Move between tmux windows with Ctrl-A n and Ctrl-A p, and toggle the last two with Ctrl-A l.
Split a tmux window with split-window: -h puts panes side by side, -v stacks them top and bottom.
When one tmux runs inside another, forward the prefix with send-prefix to control the inner session.
Kill one tmux session, every session except one, or the whole tmux server.
Jump from one tmux session to another from inside tmux, without detaching and re-attaching.
List who is attached to a tmux session, grab it back from another terminal, and detach other clients.
Rename a tmux session or window from the keyboard or the shell, and keep the name you typed.
Leave a tmux session running in the background, list what is alive, and jump back in, from the keyboard or the shell.
Create a detached tmux session, name its first window, and start it in a chosen directory, all in one command.
A single idempotent tmux command that creates a session or attaches to it if it already exists. Perfect for scripts and shell startup files.
Presentation of Bonobo ETL at EuroPython 2017 - a simple Python 3.5+ tool for extract-transform-load processes. Includes video, slides and sprint summary.
Stop wasting your time on Search Engine Optimizations (SEO), your business needs is a product that your users love, bots will follow them.
Use rel=prev and rel=next link tags to help search engines understand pagination structure on your website, improving crawling and indexing of paginated content.
Clean up merged git branches using git-sweep to remove outdated branches from both local and remote repositories, keeping your git tree organized.
Configure nginx to redirect non-www domains to www (or vice versa) for SEO consistency, including HTTP to HTTPS redirects with proper deep link support.
Measure web performance improvements using Pagespeed statistics, Google Analytics, Search Console, and PageSpeed Insights to track connection time, response time, and user experience.
Configure Amazon CloudFront CDN with Nginx and Pagespeed to serve static assets from geographically distributed edge locations, reducing server load and improving performance.
Set up Nginx with Pagespeed module and Node.js backend in Docker containers for automatic asset optimization, HTML minification, and improved web performance without code changes.
Optimize website load speed using Nginx with Pagespeed module and Amazon CloudFront CDN. Part 1 of a 4-part series covering tools, techniques, and performance measurement.
Run multiple asynchronous Python functions concurrently using asyncio.wait() to process tasks as they complete, with example code and sequence diagram.
Learn how to safely rollout new versions and rollback deployments on Kubernetes clusters using kubectl commands, with examples of rolling update strategies and health checks.
Manage software releases consistently using the git-semver tool for semantic versioning, with step-by-step instructions for version generation, tagging, and PyPI publishing.
Bash shell tip: Get the real path of a running script using a cross-platform solution that handles symbolic links and relative paths.
Planning poker is more than an estimation technique - it's a powerful tool for improving team communication, sharing knowledge, and leveraging collective intelligence in software development.
EuroPython 2016 highlights on Python's future including class attribute ordering (PEP 520), descriptor naming (PEP 487), Jupyter Lab improvements, and PyParallel GIL solution.
EuroPython 2016 notes on asynchronous programming with Python including asyncio patterns, futures, Twisted integration, and new async tools like uvloop and asyncpg.
A few notes from EuroPython 2016 about data processing, natural language processing, machine learning...
A few notes from EuroPython 2016 about testing and quality assurance.
Notes from EuroPython 2016 on web scraping tools and best practices including Jupyter, Selenium, client-server architectures, and Scrapy.