Contents:
Configure opening of file paths (semantic history) #
In iTerm’s settings, goto Profiles
-> Advanced
-> Semantic
History
.
Opening files in IntelliJ IDEA + Visual Studio Code #
First create IntelliJ IDEA’s command line launcher. Press ⇧ Shift + ⇧ Shift
(twice) to bring up the Navigate -> Search Everywhere dialog. Then write “create command-line launcher” in the search box, to select the desired action, then press ⏎ Enter
:
Now idea
is installed on the command line, on MacOS this is tipically in /usr/local/bin/idea
.
Similarly, in Visual Studio Code press ⌘ Cmd + P
, type “install code command”, and press ⏎ Enter
:
The idea
command line utility isn’t compatible with iTerm’s settings, plus if we want to discriminate based on file type, an extra script is needed. Save this in $HOME/bin/iterm-goto
:
#!/bin/sh
GOTO_FILE="$1"
GOTO_LINE="$2"
GOTO_CHAR="$3"
if ! [ -f "$GOTO_FILE" ]; then
echo "ERROR: file path missing or invalid!" >&2
exit 1
fi
# Discriminate based on file extension, open only .scala or .sbt files in IntelliJ IDEA ...
if [[ "$GOTO_FILE" =~ ^.*\.(scala|sbt)$ ]]; then
EDITOR_PATH="$(which idea)"
if [ -z "$IDEA_PATH" ]; then
EDITOR_PATH="/usr/local/bin/idea"
fi
if ! [ -z "$GOTO_LINE" ]; then
exec "$EDITOR_PATH" --line "$GOTO_LINE" "$GOTO_FILE"
else
exec "$EDITOR_PATH" "$GOTO_FILE"
fi
else
EDITOR_PATH="$(which code)"
if [ -z "$EDITOR_PATH" ]; then
EDITOR_PATH="/usr/local/bin/code"
fi
if ! [ -z "$GOTO_CHAR" ]; then
exec "$EDITOR_PATH" --goto "$GOTO_FILE:$GOTO_LINE:$GOTO_CHAR"
elif ! [ -z "$GOTO_LINE" ]; then
exec "$EDITOR_PATH" --goto "$GOTO_FILE:$GOTO_LINE"
else
exec "$EDITOR_PATH" "$GOTO_FILE"
fi
fi
Then in iTerm’s settings, goto Profiles
-> Advanced
-> Semantic
History
, and set Run command ...
to:
$HOME/bin/iterm-goto \1 \2
Setup automatic dark mode #
NOTE: this is intended for the stable 3.4.x versions, and isn’t needed in the 3.5.x betas.
Create this file in ~/Library/Application\ Support/iTerm2/Scripts/AutoLaunch/auto_dark_mode.py
:
#!/usr/bin/env python3.7
import asyncio
import iterm2
async def changeTheme(connection,parts):
theme_dark = "Dark Background"
theme_light = "Light Background"
print(parts)
if "dark" in parts:
preset = await iterm2.ColorPreset.async_get(connection, theme_dark)
else:
preset = await iterm2.ColorPreset.async_get(connection, theme_light)
# Update the list of all profiles and iterate over them.
profiles=await iterm2.PartialProfile.async_query(connection)
for partial in profiles:
# Fetch the full profile and then set the color preset in it.
profile = await partial.async_get_full_profile()
await profile.async_set_color_preset(preset)
async def main(connection):
app = await iterm2.async_get_app(connection)
window = app.current_window
initial_theme = await app.async_get_theme()
await changeTheme(connection,initial_theme)
async with iterm2.VariableMonitor(connection, iterm2.VariableScopes.APP, "effectiveTheme", None) as mon:
while True:
# Block until theme changes
theme = await mon.async_get()
# Themes have space-delimited attributes, one of which will be light or dark.
parts = theme.split(" ")
await changeTheme(connection,parts)
iterm2.run_forever(main)
Credits: @FradSer.