parent
bf6d582ee6
commit
051caa3bbb
@ -0,0 +1,135 @@ |
|||||||
|
env: |
||||||
|
TERM: xterm-256color |
||||||
|
|
||||||
|
scrolling: |
||||||
|
history: 5000 |
||||||
|
|
||||||
|
window: |
||||||
|
padding: |
||||||
|
x: 0 |
||||||
|
y: 0 |
||||||
|
|
||||||
|
colors: |
||||||
|
# Default colors |
||||||
|
#primary: |
||||||
|
#background: '#000000' |
||||||
|
#background: '#1B1B1B' |
||||||
|
#foreground: '0xf8f8f2' |
||||||
|
primary: |
||||||
|
background: '#030303' |
||||||
|
foreground: '#f1ebeb' #uoou |
||||||
|
|
||||||
|
|
||||||
|
cursor: |
||||||
|
style: |
||||||
|
shape: Beam |
||||||
|
blinking: On |
||||||
|
#text: '0x44475a' |
||||||
|
#cursor: '0xf8f8f2' |
||||||
|
|
||||||
|
# Selection colors |
||||||
|
# |
||||||
|
# Colors which should be used to draw the selection area. If selection |
||||||
|
# background is unset, selection color will be the inverse of the cell colors. |
||||||
|
# If only text is unset the cell text color will remain the same. |
||||||
|
selection: |
||||||
|
text: '0xf8f8f2' |
||||||
|
background: '0x44475a' |
||||||
|
normal: |
||||||
|
black: '#252525' |
||||||
|
red: '#ff009e' |
||||||
|
green: '#6fff00' |
||||||
|
yellow: '#d5ff00' |
||||||
|
magenta: '#00ffc2' |
||||||
|
blue: '#ff00d4' |
||||||
|
cyan: '#00fff0' |
||||||
|
white: '#ffffff' |
||||||
|
bright: |
||||||
|
black: '#535353' |
||||||
|
red: '#ff009e' |
||||||
|
green: '#6fff00' |
||||||
|
yellow: '#d5ff00' |
||||||
|
magenta: '#00ffc2' |
||||||
|
blue: '#ff00d4' |
||||||
|
cyan: '#00fff0' |
||||||
|
white: '#ffffff' |
||||||
|
|
||||||
|
# Normal colors |
||||||
|
# normal: |
||||||
|
# black: '0x000000' |
||||||
|
#red: '0xff5555' |
||||||
|
#green: '0x50fa7b' |
||||||
|
#yellow: '0xf1fa8c' |
||||||
|
#magenta: '0xbd93f9' |
||||||
|
#blue: '0xff79c6' |
||||||
|
#cyan: '0x8be9fd' |
||||||
|
#white: '0xbfbfbf' |
||||||
|
|
||||||
|
# Bright colors |
||||||
|
#bright: |
||||||
|
# black: '0x4d4d4d' |
||||||
|
# red: '0xff6e67' |
||||||
|
# green: '0x5af78e' |
||||||
|
# yellow: '0xf4f99d' |
||||||
|
# magenta: '0xcaa9fa' |
||||||
|
# blue: '0xff92d0' |
||||||
|
# cyan: '0x9aedfe' |
||||||
|
# white: '0xe6e6e6' |
||||||
|
|
||||||
|
# Dim colors |
||||||
|
# |
||||||
|
# If the dim colors are not set, they will be calculated automatically based |
||||||
|
# on the `normal` colors. |
||||||
|
dim: |
||||||
|
black: '0x14151b' |
||||||
|
red: '0xff2222' |
||||||
|
green: '0x1ef956' |
||||||
|
yellow: '0xebf85b' |
||||||
|
blue: '0x4d5b86' |
||||||
|
magenta: '0xff46b0' |
||||||
|
cyan: '0x59dffc' |
||||||
|
white: '0xe6e6d1' |
||||||
|
|
||||||
|
# Indexed Colors |
||||||
|
# |
||||||
|
# The indexed colors include all colors from 16 to 256. |
||||||
|
# When these are not set, they're filled with sensible defaults. |
||||||
|
# |
||||||
|
# Example: |
||||||
|
# `- { index: 16, color: '0xff00ff' }` |
||||||
|
# |
||||||
|
indexed_colors: [] |
||||||
|
|
||||||
|
font: |
||||||
|
normal: |
||||||
|
family: IBM Plex Mono |
||||||
|
style: |
||||||
|
|
||||||
|
bold: |
||||||
|
family: IBM Plex Mono |
||||||
|
style: Bold |
||||||
|
|
||||||
|
italic: |
||||||
|
family: IBM Plex Mono |
||||||
|
style: Italic |
||||||
|
|
||||||
|
bold_italic: |
||||||
|
family: IBM Plex Mono |
||||||
|
style: Bold Italic |
||||||
|
|
||||||
|
size: 6.95 |
||||||
|
|
||||||
|
# Key bindings |
||||||
|
Key_bindings: |
||||||
|
- { key: Equals, mods: Super, action: IncreaseFontSize } |
||||||
|
- { key: Subtract, mods: Super, action: DecreaseFontSize } |
||||||
|
- { key: Key0, mods: Super, action: ResetFontSize } |
||||||
|
- { key: PageUp, mods: Shift, action: ScrollPageUp } |
||||||
|
- { key: PageDown, mods: Shift, action: ScrollPageDown } |
||||||
|
- { key: End, mods: Shift, action: ScrollToBottom } |
||||||
|
- { key: Home, mods: Shift, action: ScrollToTop } |
||||||
|
- { key: V, mods: Control|Alt, action: Paste } |
||||||
|
- { key: C, mods: Control|Alt, action: Copy } |
||||||
|
- { key: Return, mods: Control, action: SpawnNewInstance } |
||||||
|
- { key: T, mods: Control, action: SpawnNewInstance } |
||||||
|
|
@ -0,0 +1,813 @@ |
|||||||
|
# Configuration for Alacritty, the GPU enhanced terminal emulator. |
||||||
|
# p |
||||||
|
|
||||||
|
# Import additional configuration files |
||||||
|
# |
||||||
|
# Imports are loaded in order, skipping all missing files, with the importing |
||||||
|
# file being loaded last. If a field is already present in a previous import, it |
||||||
|
# will be replaced. |
||||||
|
# |
||||||
|
# All imports must either be absolute paths starting with `/`, or paths relative |
||||||
|
# to the user's home directory starting with `~/`. |
||||||
|
#import: |
||||||
|
# - /path/to/alacritty.yml |
||||||
|
|
||||||
|
# Any items in the `env` entry below will be added as |
||||||
|
# environment variables. Some entries may override variables |
||||||
|
# set by alacritty itself. |
||||||
|
#env: |
||||||
|
# TERM variable |
||||||
|
# |
||||||
|
# This value is used to set the `$TERM` environment variable for |
||||||
|
# each instance of Alacritty. If it is not present, alacritty will |
||||||
|
# check the local terminfo database and use `alacritty` if it is |
||||||
|
# available, otherwise `xterm-256color` is used. |
||||||
|
#TERM: alacritty |
||||||
|
|
||||||
|
#window: |
||||||
|
# Window dimensions (changes require restart) |
||||||
|
# |
||||||
|
# Number of lines/columns (not pixels) in the terminal. The number of columns |
||||||
|
# must be at least `2`, while using a value of `0` for columns and lines will |
||||||
|
# fall back to the window manager's recommended size. |
||||||
|
#dimensions: |
||||||
|
# columns: 0 |
||||||
|
# lines: 0 |
||||||
|
|
||||||
|
# Window position (changes require restart) |
||||||
|
# |
||||||
|
# Specified in number of pixels. |
||||||
|
# If the position is not set, the window manager will handle the placement. |
||||||
|
#position: |
||||||
|
# x: 0 |
||||||
|
# y: 0 |
||||||
|
|
||||||
|
# Window padding (changes require restart) |
||||||
|
# |
||||||
|
# Blank space added around the window in pixels. This padding is scaled |
||||||
|
# by DPI and the specified value is always added at both opposing sides. |
||||||
|
#padding: |
||||||
|
# x: 0 |
||||||
|
# y: 0 |
||||||
|
|
||||||
|
# Spread additional padding evenly around the terminal content. |
||||||
|
#dynamic_padding: false |
||||||
|
|
||||||
|
# Window decorations |
||||||
|
# |
||||||
|
# Values for `decorations`: |
||||||
|
# - full: Borders and title bar |
||||||
|
# - none: Neither borders nor title bar |
||||||
|
# |
||||||
|
# Values for `decorations` (macOS only): |
||||||
|
# - transparent: Title bar, transparent background and title bar buttons |
||||||
|
# - buttonless: Title bar, transparent background and no title bar buttons |
||||||
|
#decorations: full |
||||||
|
|
||||||
|
# Startup Mode (changes require restart) |
||||||
|
# |
||||||
|
# Values for `startup_mode`: |
||||||
|
# - Windowed |
||||||
|
# - Maximized |
||||||
|
# - Fullscreen |
||||||
|
# |
||||||
|
# Values for `startup_mode` (macOS only): |
||||||
|
# - SimpleFullscreen |
||||||
|
#startup_mode: Windowed |
||||||
|
|
||||||
|
# Window title |
||||||
|
#title: Alacritty |
||||||
|
|
||||||
|
# Allow terminal applications to change Alacritty's window title. |
||||||
|
#dynamic_title: true |
||||||
|
|
||||||
|
# Window class (Linux/BSD only): |
||||||
|
#class: |
||||||
|
# Application instance name |
||||||
|
#instance: Alacritty |
||||||
|
# General application class |
||||||
|
#general: Alacritty |
||||||
|
|
||||||
|
# GTK theme variant (Linux/BSD only) |
||||||
|
# |
||||||
|
# Override the variant of the GTK theme. Commonly supported values are `dark` |
||||||
|
# and `light`. Set this to `None` to use the default theme variant. |
||||||
|
#gtk_theme_variant: None |
||||||
|
|
||||||
|
#scrolling: |
||||||
|
# Maximum number of lines in the scrollback buffer. |
||||||
|
# Specifying '0' will disable scrolling. |
||||||
|
#history: 10000 |
||||||
|
|
||||||
|
# Scrolling distance multiplier. |
||||||
|
#multiplier: 3 |
||||||
|
|
||||||
|
# Font configuration |
||||||
|
font: |
||||||
|
# Normal (roman) font face |
||||||
|
normal: |
||||||
|
# Font family |
||||||
|
# |
||||||
|
Default: |
||||||
|
# - (macOS) Menlo |
||||||
|
# - (Linux/BSD) monospace |
||||||
|
# - (Windows) Consolas |
||||||
|
family: monospace |
||||||
|
|
||||||
|
# The `style` can be specified to pick a specific face. |
||||||
|
#style: Regular |
||||||
|
|
||||||
|
# Bold font face |
||||||
|
#bold: |
||||||
|
# Font family |
||||||
|
# |
||||||
|
# If the bold family is not specified, it will fall back to the |
||||||
|
# value specified for the normal font. |
||||||
|
#family: monospace |
||||||
|
|
||||||
|
# The `style` can be specified to pick a specific face. |
||||||
|
#style: Bold |
||||||
|
|
||||||
|
# Italic font face |
||||||
|
#italic: |
||||||
|
# Font family |
||||||
|
# |
||||||
|
# If the italic family is not specified, it will fall back to the |
||||||
|
# value specified for the normal font. |
||||||
|
#family: monospace |
||||||
|
|
||||||
|
# The `style` can be specified to pick a specific face. |
||||||
|
#style: Italic |
||||||
|
|
||||||
|
# Bold italic font face |
||||||
|
#bold_italic: |
||||||
|
# Font family |
||||||
|
# |
||||||
|
# If the bold italic family is not specified, it will fall back to the |
||||||
|
# value specified for the normal font. |
||||||
|
#family: monospace |
||||||
|
|
||||||
|
# The `style` can be specified to pick a specific face. |
||||||
|
#style: Bold Italic |
||||||
|
|
||||||
|
# Point size |
||||||
|
size: 6.95 |
||||||
|
|
||||||
|
# Offset is the extra space around each character. `offset.y` can be thought |
||||||
|
# of as modifying the line spacing, and `offset.x` as modifying the letter |
||||||
|
# spacing. |
||||||
|
#offset: |
||||||
|
# x: 0 |
||||||
|
# y: 0 |
||||||
|
|
||||||
|
# Glyph offset determines the locations of the glyphs within their cells with |
||||||
|
# the default being at the bottom. Increasing `x` moves the glyph to the |
||||||
|
# right, increasing `y` moves the glyph upward. |
||||||
|
#glyph_offset: |
||||||
|
# x: 0 |
||||||
|
# y: 0 |
||||||
|
|
||||||
|
# Thin stroke font rendering (macOS only) |
||||||
|
# |
||||||
|
# Thin strokes are suitable for retina displays, but for non-retina screens |
||||||
|
# it is recommended to set `use_thin_strokes` to `false`. |
||||||
|
#use_thin_strokes: true |
||||||
|
|
||||||
|
# If `true`, bold text is drawn using the bright color variants. |
||||||
|
#draw_bold_text_with_bright_colors: false |
||||||
|
|
||||||
|
# Colors (Tomorrow Night) |
||||||
|
colors: |
||||||
|
# Default colors |
||||||
|
#: primary: |
||||||
|
background: '#1d1f21' |
||||||
|
foreground: '#c5c8c6' |
||||||
|
|
||||||
|
# Bright and dim foreground colors |
||||||
|
# |
||||||
|
# The dimmed foreground color is calculated automatically if it is not |
||||||
|
# present. If the bright foreground color is not set, or |
||||||
|
# `draw_bold_text_with_bright_colors` is `false`, the normal foreground |
||||||
|
# color will be used. |
||||||
|
#dim_foreground: '#828482' |
||||||
|
#bright_foreground: '#eaeaea' |
||||||
|
|
||||||
|
# Cursor colors |
||||||
|
# |
||||||
|
# Colors which should be used to draw the terminal cursor. |
||||||
|
# |
||||||
|
# Allowed values are CellForeground and CellBackground, which reference the |
||||||
|
# affected cell, or hexadecimal colors like #ff00ff. |
||||||
|
#cursor: |
||||||
|
# text: CellBackground |
||||||
|
# cursor: CellForeground |
||||||
|
|
||||||
|
# Vi mode cursor colors |
||||||
|
# |
||||||
|
# Colors for the cursor when the vi mode is active. |
||||||
|
# |
||||||
|
# Allowed values are CellForeground and CellBackground, which reference the |
||||||
|
# affected cell, or hexadecimal colors like #ff00ff. |
||||||
|
#vi_mode_cursor: |
||||||
|
# text: CellBackground |
||||||
|
# cursor: CellForeground |
||||||
|
|
||||||
|
# Search colors |
||||||
|
# |
||||||
|
# Colors used for the search bar and match highlighting. |
||||||
|
#search: |
||||||
|
# Allowed values are CellForeground and CellBackground, which reference the |
||||||
|
# affected cell, or hexadecimal colors like #ff00ff. |
||||||
|
#matches: |
||||||
|
# foreground: '#000000' |
||||||
|
# background: '#ffffff' |
||||||
|
#focused_match: |
||||||
|
# foreground: CellBackground |
||||||
|
# background: CellForeground |
||||||
|
|
||||||
|
#bar: |
||||||
|
# background: '#c5c8c6' |
||||||
|
# foreground: '#1d1f21' |
||||||
|
|
||||||
|
# Line indicator |
||||||
|
# |
||||||
|
# Color used for the indicator displaying the position in history during |
||||||
|
# search and vi mode. |
||||||
|
# |
||||||
|
# By default, these will use the opposing primary color. |
||||||
|
#line_indicator: |
||||||
|
# foreground: None |
||||||
|
# background: None |
||||||
|
|
||||||
|
# Selection colors |
||||||
|
# |
||||||
|
# Colors which should be used to draw the selection area. |
||||||
|
# |
||||||
|
# Allowed values are CellForeground and CellBackground, which reference the |
||||||
|
# affected cell, or hexadecimal colors like #ff00ff. |
||||||
|
#selection: |
||||||
|
# text: CellBackground |
||||||
|
# background: CellForeground |
||||||
|
|
||||||
|
# Normal colors |
||||||
|
#normal: |
||||||
|
# black: '#1d1f21' |
||||||
|
# red: '#cc6666' |
||||||
|
# green: '#b5bd68' |
||||||
|
# yellow: '#f0c674' |
||||||
|
# blue: '#81a2be' |
||||||
|
# magenta: '#b294bb' |
||||||
|
# cyan: '#8abeb7' |
||||||
|
# white: '#c5c8c6' |
||||||
|
|
||||||
|
# Bright colors |
||||||
|
#bright: |
||||||
|
# black: '#666666' |
||||||
|
# red: '#d54e53' |
||||||
|
# green: '#b9ca4a' |
||||||
|
# yellow: '#e7c547' |
||||||
|
# blue: '#7aa6da' |
||||||
|
# magenta: '#c397d8' |
||||||
|
# cyan: '#70c0b1' |
||||||
|
# white: '#eaeaea' |
||||||
|
|
||||||
|
# Dim colors |
||||||
|
# |
||||||
|
# If the dim colors are not set, they will be calculated automatically based |
||||||
|
# on the `normal` colors. |
||||||
|
#dim: |
||||||
|
# black: '#131415' |
||||||
|
# red: '#864343' |
||||||
|
# green: '#777c44' |
||||||
|
# yellow: '#9e824c' |
||||||
|
# blue: '#556a7d' |
||||||
|
# magenta: '#75617b' |
||||||
|
# cyan: '#5b7d78' |
||||||
|
# white: '#828482' |
||||||
|
|
||||||
|
# Indexed Colors |
||||||
|
# |
||||||
|
# The indexed colors include all colors from 16 to 256. |
||||||
|
# When these are not set, they're filled with sensible defaults. |
||||||
|
# |
||||||
|
# Example: |
||||||
|
# `- { index: 16, color: '#ff00ff' }` |
||||||
|
# |
||||||
|
#indexed_colors: [] |
||||||
|
|
||||||
|
# Bell |
||||||
|
# |
||||||
|
# The bell is rung every time the BEL control character is received. |
||||||
|
#bell: |
||||||
|
# Visual Bell Animation |
||||||
|
# |
||||||
|
# Animation effect for flashing the screen when the visual bell is rung. |
||||||
|
# |
||||||
|
# Values for `animation`: |
||||||
|
# - Ease |
||||||
|
# - EaseOut |
||||||
|
# - EaseOutSine |
||||||
|
# - EaseOutQuad |
||||||
|
# - EaseOutCubic |
||||||
|
# - EaseOutQuart |
||||||
|
# - EaseOutQuint |
||||||
|
# - EaseOutExpo |
||||||
|
# - EaseOutCirc |
||||||
|
# - Linear |
||||||
|
#animation: EaseOutExpo |
||||||
|
|
||||||
|
# Duration of the visual bell flash in milliseconds. A `duration` of `0` will |
||||||
|
# disable the visual bell animation. |
||||||
|
#duration: 0 |
||||||
|
|
||||||
|
# Visual bell animation color. |
||||||
|
#color: '#ffffff' |
||||||
|
|
||||||
|
# Bell Command |
||||||
|
# |
||||||
|
# This program is executed whenever the bell is rung. |
||||||
|
# |
||||||
|
# When set to `command: None`, no command will be executed. |
||||||
|
# |
||||||
|
# Example: |
||||||
|
# command: |
||||||
|
# program: notify-send |
||||||
|
# args: ["Hello, World!"] |
||||||
|
# |
||||||
|
#command: None |
||||||
|
|
||||||
|
# Background opacity |
||||||
|
# |
||||||
|
# Window opacity as a floating point number from `0.0` to `1.0`. |
||||||
|
# The value `0.0` is completely transparent and `1.0` is opaque. |
||||||
|
background_opacity: 1.0 |
||||||
|
|
||||||
|
#selection: |
||||||
|
# This string contains all characters that are used as separators for |
||||||
|
# "semantic words" in Alacritty. |
||||||
|
#semantic_escape_chars: ",│`|:\"' ()[]{}<>\t" |
||||||
|
|
||||||
|
# When set to `true`, selected text will be copied to the primary clipboard. |
||||||
|
#save_to_clipboard: false |
||||||
|
|
||||||
|
cursor: |
||||||
|
# Cursor style |
||||||
|
style: |
||||||
|
# Cursor shape |
||||||
|
# |
||||||
|
# Values for `shape`: |
||||||
|
# - ▇ Block |
||||||
|
# - _ Underline |
||||||
|
# - | Beam |
||||||
|
shape: Block |
||||||
|
|
||||||
|
# Cursor blinking state |
||||||
|
# |
||||||
|
# Values for `blinking`: |
||||||
|
# - Never: Prevent the cursor from ever blinking |
||||||
|
# - Off: Disable blinking by default |
||||||
|
# - On: Enable blinking by default |
||||||
|
# - Always: Force the cursor to always blink |
||||||
|
#blinking: Off |
||||||
|
|
||||||
|
# Vi mode cursor style |
||||||
|
# |
||||||
|
# If the vi mode cursor style is `None` or not specified, it will fall back to |
||||||
|
# the style of the active value of the normal cursor. |
||||||
|
# |
||||||
|
# See `cursor.style` for available options. |
||||||
|
#vi_mode_style: None |
||||||
|
|
||||||
|
# Cursor blinking interval in milliseconds. |
||||||
|
#blink_interval: 750 |
||||||
|
|
||||||
|
# If this is `true`, the cursor will be rendered as a hollow box when the |
||||||
|
# window is not focused. |
||||||
|
#unfocused_hollow: true |
||||||
|
|
||||||
|
# Thickness of the cursor relative to the cell width as floating point number |
||||||
|
# from `0.0` to `1.0`. |
||||||
|
#thickness: 0.15 |
||||||
|
|
||||||
|
# Live config reload (changes require restart) |
||||||
|
#live_config_reload: true |
||||||
|
|
||||||
|
# Shell |
||||||
|
# |
||||||
|
# You can set `shell.program` to the path of your favorite shell, e.g. |
||||||
|
# `/bin/fish`. Entries in `shell.args` are passed unmodified as arguments to the |
||||||
|
# shell. |
||||||
|
# |
||||||
|
# Default: |
||||||
|
# - (macOS) /bin/bash --login |
||||||
|
# - (Linux/BSD) user login shell |
||||||
|
# - (Windows) powershell |
||||||
|
#shell: |
||||||
|
# program: /bin/bash |
||||||
|
# args: |
||||||
|
# - --login |
||||||
|
|
||||||
|
# Startup directory |
||||||
|
# |
||||||
|
# Directory the shell is started in. If this is unset, or `None`, the working |
||||||
|
# directory of the parent process will be used. |
||||||
|
#working_directory: None |
||||||
|
|
||||||
|
# Send ESC (\x1b) before characters when alt is pressed. |
||||||
|
#alt_send_esc: true |
||||||
|
|
||||||
|
#mouse: |
||||||
|
# Click settings |
||||||
|
# |
||||||
|
# The `double_click` and `triple_click` settings control the time |
||||||
|
# alacritty should wait for accepting multiple clicks as one double |
||||||
|
# or triple click. |
||||||
|
#double_click: { threshold: 300 } |
||||||
|
#triple_click: { threshold: 300 } |
||||||
|
|
||||||
|
# If this is `true`, the cursor is temporarily hidden when typing. |
||||||
|
#hide_when_typing: false |
||||||
|
|
||||||
|
#url: |
||||||
|
# URL launcher |
||||||
|
# |
||||||
|
# This program is executed when clicking on a text which is recognized as a |
||||||
|
# URL. The URL is always added to the command as the last parameter. |
||||||
|
# |
||||||
|
# When set to `launcher: None`, URL launching will be disabled completely. |
||||||
|
# |
||||||
|
# Default: |
||||||
|
# - (macOS) open |
||||||
|
# - (Linux/BSD) xdg-open |
||||||
|
# - (Windows) explorer |
||||||
|
#launcher: |
||||||
|
# program: xdg-open |
||||||
|
# args: [] |
||||||
|
|
||||||
|
# URL modifiers |
||||||
|
# |
||||||
|
# These are the modifiers that need to be held down for opening URLs when |
||||||
|
# clicking on them. The available modifiers are documented in the key |
||||||
|
# binding section. |
||||||
|
#modifiers: None |
||||||
|
|
||||||
|
# Mouse bindings |
||||||
|
# |
||||||
|
# Mouse bindings are specified as a list of objects, much like the key |
||||||
|
# bindings further below. |
||||||
|
# |
||||||
|
# To trigger mouse bindings when an application running within Alacritty |
||||||
|
# captures the mouse, the `Shift` modifier is automatically added as a |
||||||
|
# requirement. |
||||||
|
# |
||||||
|
# Each mouse binding will specify a: |
||||||
|
# |
||||||
|
# - `mouse`: |
||||||
|
# |
||||||
|
# - Middle |
||||||
|
# - Left |
||||||
|
# - Right |
||||||
|
# - Numeric identifier such as `5` |
||||||
|
# |
||||||
|
# - `action` (see key bindings) |
||||||
|
# |
||||||
|
# And optionally: |
||||||
|
# |
||||||
|
# - `mods` (see key bindings) |
||||||
|
#mouse_bindings: |
||||||
|
# - { mouse: Middle, action: PasteSelection } |
||||||
|
|
||||||
|
# Key bindings |
||||||
|
# |
||||||
|
# Key bindings are specified as a list of objects. For example, this is the |
||||||
|
# default paste binding: |
||||||
|
# |
||||||
|
# `- { key: V, mods: Control|Shift, action: Paste }` |
||||||
|
# |
||||||
|
# Each key binding will specify a: |
||||||
|
# |
||||||
|
# - `key`: Identifier of the key pressed |
||||||
|
# |
||||||
|
# - A-Z |
||||||
|
# - F1-F24 |
||||||
|
# - Key0-Key9 |
||||||
|
# |
||||||
|
# A full list with available key codes can be found here: |
||||||
|
# https://docs.rs/glutin/*/glutin/event/enum.VirtualKeyCode.html#variants |
||||||
|
# |
||||||
|
# Instead of using the name of the keys, the `key` field also supports using |
||||||
|
# the scancode of the desired key. Scancodes have to be specified as a |
||||||
|
# decimal number. This command will allow you to display the hex scancodes |
||||||
|
# for certain keys: |
||||||
|
# |
||||||
|
# `showkey --scancodes`. |
||||||
|
# |
||||||
|
# Then exactly one of: |
||||||
|
# |
||||||
|
# - `chars`: Send a byte sequence to the running application |
||||||
|
# |
||||||
|
# The `chars` field writes the specified string to the terminal. This makes |
||||||
|
# it possible to pass escape sequences. To find escape codes for bindings |
||||||
|
# like `PageUp` (`"\x1b[5~"`), you can run the command `showkey -a` outside |
||||||
|
# of tmux. Note that applications use terminfo to map escape sequences back |
||||||
|
# to keys. It is therefore required to update the terminfo when changing an |
||||||
|
# escape sequence. |
||||||
|
# |
||||||
|
# - `action`: Execute a predefined action |
||||||
|
# |
||||||
|
# - ToggleViMode |
||||||
|
# - SearchForward |
||||||
|
# Start searching toward the right of the search origin. |
||||||
|
# - SearchBackward |
||||||
|
# Start searching toward the left of the search origin. |
||||||
|
# - Copy |
||||||
|
# - Paste |
||||||
|
# - IncreaseFontSize |
||||||
|
# - DecreaseFontSize |
||||||
|
# - ResetFontSize |
||||||
|
# - ScrollPageUp |
||||||
|
# - ScrollPageDown |
||||||
|
# - ScrollHalfPageUp |
||||||
|
# - ScrollHalfPageDown |
||||||
|
# - ScrollLineUp |
||||||
|
# - ScrollLineDown |
||||||
|
# - ScrollToTop |
||||||
|
# - ScrollToBottom |
||||||
|
# - ClearHistory |
||||||
|
# Remove the terminal's scrollback history. |
||||||
|
# - Hide |
||||||
|
# Hide the Alacritty window. |
||||||
|
# - Minimize |
||||||
|
# Minimize the Alacritty window. |
||||||
|
# - Quit |
||||||
|
# Quit Alacritty. |
||||||
|
# - ToggleFullscreen |
||||||
|
# - SpawnNewInstance |
||||||
|
# Spawn a new instance of Alacritty. |
||||||
|
# - ClearLogNotice |
||||||
|
# Clear Alacritty's UI warning and error notice. |
||||||
|
# - ClearSelection |
||||||
|
# Remove the active selection. |
||||||
|
# - ReceiveChar |
||||||
|
# - None |
||||||
|
# |
||||||
|
# - Vi mode exclusive actions: |
||||||
|
# |
||||||
|
# - Open |
||||||
|
# Open URLs at the cursor location with the launcher configured in |
||||||
|
# `url.launcher`. |
||||||
|
# - ToggleNormalSelection |
||||||
|
# - ToggleLineSelection |
||||||
|
# - ToggleBlockSelection |
||||||
|
# - ToggleSemanticSelection |
||||||
|
# Toggle semantic selection based on `selection.semantic_escape_chars`. |
||||||
|
# |
||||||
|
# - Vi mode exclusive cursor motion actions: |
||||||
|
# |
||||||
|
# - Up |
||||||
|
# One line up. |
||||||
|
# - Down |
||||||
|
# One line down. |
||||||
|
# - Left |
||||||
|
# One character left. |
||||||
|
# - Right |
||||||
|
# One character right. |
||||||
|
# - First |
||||||
|
# First column, or beginning of the line when already at the first column. |
||||||
|
# - Last |
||||||
|
# Last column, or beginning of the line when already at the last column. |
||||||
|
# - FirstOccupied |
||||||
|
# First non-empty cell in this terminal row, or first non-empty cell of |
||||||
|
# the line when already at the first cell of the row. |
||||||
|
# - High |
||||||
|
# Top of the screen. |
||||||
|
# - Middle |
||||||
|
# Center of the screen. |
||||||
|
# - Low |
||||||
|
# Bottom of the screen. |
||||||
|
# - SemanticLeft |
||||||
|
# Start of the previous semantically separated word. |
||||||
|
# - SemanticRight |
||||||
|
# Start of the next semantically separated word. |
||||||
|
# - SemanticLeftEnd |
||||||
|
# End of the previous semantically separated word. |
||||||
|
# - SemanticRightEnd |
||||||
|
# End of the next semantically separated word. |
||||||
|
# - WordLeft |
||||||
|
# Start of the previous whitespace separated word. |
||||||
|
# - WordRight |
||||||
|
# Start of the next whitespace separated word. |
||||||
|
# - WordLeftEnd |
||||||
|
# End of the previous whitespace separated word. |
||||||
|
# - WordRightEnd |
||||||
|
# End of the next whitespace separated word. |
||||||
|
# - Bracket |
||||||
|
# Character matching the bracket at the cursor's location. |
||||||
|
# - SearchNext |
||||||
|
# Beginning of the next match. |
||||||
|
# - SearchPrevious |
||||||
|
# Beginning of the previous match. |
||||||
|
# - SearchStart |
||||||
|
# Start of the match to the left of the vi mode cursor. |
||||||
|
# - SearchEnd |
||||||
|
# End of the match to the right of the vi mode cursor. |
||||||
|
# |
||||||
|
# - Search mode exclusive actions: |
||||||
|
# - SearchFocusNext |
||||||
|
# Move the focus to the next search match. |
||||||
|
# - SearchFocusPrevious |
||||||
|
# Move the focus to the previous search match. |
||||||
|
# - SearchConfirm |
||||||
|
# - SearchCancel |
||||||
|
# - SearchClear |
||||||
|
# Reset the search regex. |
||||||
|
# - SearchDeleteWord |
||||||
|
# Delete the last word in the search regex. |
||||||
|
# - SearchHistoryPrevious |
||||||
|
# Go to the previous regex in the search history. |
||||||
|
# - SearchHistoryNext |
||||||
|
# Go to the next regex in the search history. |
||||||
|
# |
||||||
|
# - macOS exclusive actions: |
||||||
|
# - ToggleSimpleFullscreen |
||||||
|
# Enter fullscreen without occupying another space. |
||||||
|
# |
||||||
|
# - Linux/BSD exclusive actions: |
||||||
|
# |
||||||
|
# - CopySelection |
||||||
|
# Copy from the selection buffer. |
||||||
|
# - PasteSelection |
||||||
|
# Paste from the selection buffer. |
||||||
|
# |
||||||
|
# - `command`: Fork and execute a specified command plus arguments |
||||||
|
# |
||||||
|
# The `command` field must be a map containing a `program` string and an |
||||||
|
# `args` array of command line parameter strings. For example: |
||||||
|
# `{ program: "alacritty", args: ["-e", "vttest"] }` |
||||||
|
# |
||||||
|
# And optionally: |
||||||
|
# |
||||||
|
# - `mods`: Key modifiers to filter binding actions |
||||||
|
# |
||||||
|
# - Command |
||||||
|
# - Control |
||||||
|
# - Option |
||||||
|
# - Super |
||||||
|
# - Shift |
||||||
|
# - Alt |
||||||
|
# |
||||||
|
# Multiple `mods` can be combined using `|` like this: |
||||||
|
# `mods: Control|Shift`. |
||||||
|
# Whitespace and capitalization are relevant and must match the example. |
||||||
|
# |
||||||
|
# - `mode`: Indicate a binding for only specific terminal reported modes |
||||||
|
# |
||||||
|
# This is mainly used to send applications the correct escape sequences |
||||||
|
# when in different modes. |
||||||
|
# |
||||||
|
# - AppCursor |
||||||
|
# - AppKeypad |
||||||
|
# - Search |
||||||
|
# - Alt |
||||||
|
# - Vi |
||||||
|
# |
||||||
|
# A `~` operator can be used before a mode to apply the binding whenever |
||||||
|
# the mode is *not* active, e.g. `~Alt`. |
||||||
|
# |
||||||
|
# Bindings are always filled by default, but will be replaced when a new |
||||||
|
# binding with the same triggers is defined. To unset a default binding, it can |
||||||
|
# be mapped to the `ReceiveChar` action. Alternatively, you can use `None` for |
||||||
|
# a no-op if you do not wish to receive input characters for that binding. |
||||||
|
# |
||||||
|
# If the same trigger is assigned to multiple actions, all of them are executed |
||||||
|
# in the order they were defined in. |
||||||
|
#key_bindings: |
||||||
|
#- { key: Paste, action: Paste } |
||||||
|
#- { key: Copy, action: Copy } |
||||||
|
#- { key: L, mods: Control, action: ClearLogNotice } |
||||||
|
#- { key: L, mods: Control, mode: ~Vi|~Search, chars: "\x0c" } |
||||||
|
#- { key: PageUp, mods: Shift, mode: ~Alt, action: ScrollPageUp, } |
||||||
|
#- { key: PageDown, mods: Shift, mode: ~Alt, action: ScrollPageDown } |
||||||
|
#- { key: Home, mods: Shift, mode: ~Alt, action: ScrollToTop, } |
||||||
|
#- { key: End, mods: Shift, mode: ~Alt, action: ScrollToBottom } |
||||||
|
|
||||||
|
# Vi Mode |
||||||
|
#- { key: Space, mods: Shift|Control, mode: Vi|~Search, action: ScrollToBottom } |
||||||
|
#- { key: Space, mods: Shift|Control, mode: ~Search, action: ToggleViMode } |
||||||
|
#- { key: Escape, mode: Vi|~Search, action: ClearSelection } |
||||||
|
#- { key: I, mode: Vi|~Search, action: ScrollToBottom } |
||||||
|
#- { key: I, mode: Vi|~Search, action: ToggleViMode } |
||||||
|
#- { key: C, mods: Control, mode: Vi|~Search, action: ToggleViMode } |
||||||
|
#- { key: Y, mods: Control, mode: Vi|~Search, action: ScrollLineUp } |
||||||
|
#- { key: E, mods: Control, mode: Vi|~Search, action: ScrollLineDown } |
||||||
|
#- { key: G, mode: Vi|~Search, action: ScrollToTop } |
||||||
|
#- { key: G, mods: Shift, mode: Vi|~Search, action: ScrollToBottom } |
||||||
|
#- { key: B, mods: Control, mode: Vi|~Search, action: ScrollPageUp } |
||||||
|
#- { key: F, mods: Control, mode: Vi|~Search, action: ScrollPageDown } |
||||||
|
#- { key: U, mods: Control, mode: Vi|~Search, action: ScrollHalfPageUp } |
||||||
|
#- { key: D, mods: Control, mode: Vi|~Search, action: ScrollHalfPageDown } |
||||||
|
#- { key: Y, mode: Vi|~Search, action: Copy } |
||||||
|
#- { key: Y, mode: Vi|~Search, action: ClearSelection } |
||||||
|
#- { key: Copy, mode: Vi|~Search, action: ClearSelection } |
||||||
|
#- { key: V, mode: Vi|~Search, action: ToggleNormalSelection } |
||||||
|
#- { key: V, mods: Shift, mode: Vi|~Search, action: ToggleLineSelection } |
||||||
|
#- { key: V, mods: Control, mode: Vi|~Search, action: ToggleBlockSelection } |
||||||
|
#- { key: V, mods: Alt, mode: Vi|~Search, action: ToggleSemanticSelection } |
||||||
|
#- { key: Return, mode: Vi|~Search, action: Open } |
||||||
|
#- { key: K, mode: Vi|~Search, action: Up } |
||||||
|
#- { key: J, mode: Vi|~Search, action: Down } |
||||||
|
#- { key: H, mode: Vi|~Search, action: Left } |
||||||
|
#- { key: L, mode: Vi|~Search, action: Right } |
||||||
|
#- { key: Up, mode: Vi|~Search, action: Up } |
||||||
|
#- { key: Down, mode: Vi|~Search, action: Down } |
||||||
|
#- { key: Left, mode: Vi|~Search, action: Left } |
||||||
|
#- { key: Right, mode: Vi|~Search, action: Right } |
||||||
|
#- { key: Key0, mode: Vi|~Search, action: First } |
||||||
|
#- { key: Key4, mods: Shift, mode: Vi|~Search, action: Last } |
||||||
|
#- { key: Key6, mods: Shift, mode: Vi|~Search, action: FirstOccupied } |
||||||
|
#- { key: H, mods: Shift, mode: Vi|~Search, action: High } |
||||||
|
#- { key: M, mods: Shift, mode: Vi|~Search, action: Middle } |
||||||
|
#- { key: L, mods: Shift, mode: Vi|~Search, action: Low } |
||||||
|
#- { key: B, mode: Vi|~Search, action: SemanticLeft } |
||||||
|
#- { key: W, mode: Vi|~Search, action: SemanticRight } |
||||||
|
#- { key: E, mode: Vi|~Search, action: SemanticRightEnd } |
||||||
|
#- { key: B, mods: Shift, mode: Vi|~Search, action: WordLeft } |
||||||
|
#- { key: W, mods: Shift, mode: Vi|~Search, action: WordRight } |
||||||
|
#- { key: E, mods: Shift, mode: Vi|~Search, action: WordRightEnd } |
||||||
|
#- { key: Key5, mods: Shift, mode: Vi|~Search, action: Bracket } |
||||||
|
#- { key: Slash, mode: Vi|~Search, action: SearchForward } |
||||||
|
#- { key: Slash, mods: Shift, mode: Vi|~Search, action: SearchBackward } |
||||||
|
#- { key: N, mode: Vi|~Search, action: SearchNext } |
||||||
|
#- { key: N, mods: Shift, mode: Vi|~Search, action: SearchPrevious } |
||||||
|
|
||||||
|
# Search Mode |
||||||
|
#- { key: Return, mode: Search|Vi, action: SearchConfirm } |
||||||
|
#- { key: Escape, mode: Search, action: SearchCancel } |
||||||
|
#- { key: C, mods: Control, mode: Search, action: SearchCancel } |
||||||
|
#- { key: U, mods: Control, mode: Search, action: SearchClear } |
||||||
|
#- { key: W, mods: Control, mode: Search, action: SearchDeleteWord } |
||||||
|
#- { key: P, mods: Control, mode: Search, action: SearchHistoryPrevious } |
||||||
|
#- { key: N, mods: Control, mode: Search, action: SearchHistoryNext } |
||||||
|
#- { key: Up, mode: Search, action: SearchHistoryPrevious } |
||||||
|
#- { key: Down, mode: Search, action: SearchHistoryNext } |
||||||
|
#- { key: Return, mode: Search|~Vi, action: SearchFocusNext } |
||||||
|
#- { key: Return, mods: Shift, mode: Search|~Vi, action: SearchFocusPrevious } |
||||||
|
|
||||||
|
# (Windows, Linux, and BSD only) |
||||||
|
#- { key: V, mods: Control|Shift, mode: ~Vi, action: Paste } |
||||||
|
#- { key: C, mods: Control|Shift, action: Copy } |
||||||
|
#- { key: F, mods: Control|Shift, mode: ~Search, action: SearchForward } |
||||||
|
#- { key: B, mods: Control|Shift, mode: ~Search, action: SearchBackward } |
||||||
|
#- { key: C, mods: Control|Shift, mode: Vi|~Search, action: ClearSelection } |
||||||
|
#- { key: Insert, mods: Shift, action: PasteSelection } |
||||||
|
#- { key: Key0, mods: Control, action: ResetFontSize } |
||||||
|
#- { key: Equals, mods: Control, action: IncreaseFontSize } |
||||||
|
#- { key: Plus, mods: Control, action: IncreaseFontSize } |
||||||
|
#- { key: NumpadAdd, mods: Control, action: IncreaseFontSize } |
||||||
|
#- { key: Minus, mods: Control, action: DecreaseFontSize } |
||||||
|
#- { key: NumpadSubtract, mods: Control, action: DecreaseFontSize } |
||||||
|
|
||||||
|
# (Windows only) |
||||||
|
#- { key: Return, mods: Alt, action: ToggleFullscreen } |
||||||
|
|
||||||
|
# (macOS only) |
||||||
|
#- { key: K, mods: Command, mode: ~Vi|~Search, chars: "\x0c" } |
||||||
|
#- { key: K, mods: Command, mode: ~Vi|~Search, action: ClearHistory } |
||||||
|
#- { key: Key0, mods: Command, action: ResetFontSize } |
||||||
|
#- { key: Equals, mods: Command, action: IncreaseFontSize } |
||||||
|
#- { key: Plus, mods: Command, action: IncreaseFontSize } |
||||||
|
#- { key: NumpadAdd, mods: Command, action: IncreaseFontSize } |
||||||
|
#- { key: Minus, mods: Command, action: DecreaseFontSize } |
||||||
|
#- { key: NumpadSubtract, mods: Command, action: DecreaseFontSize } |
||||||
|
#- { key: V, mods: Command, action: Paste } |
||||||
|
#- { key: C, mods: Command, action: Copy } |
||||||
|
#- { key: C, mods: Command, mode: Vi|~Search, action: ClearSelection } |
||||||
|
#- { key: H, mods: Command, action: Hide } |
||||||
|
#- { key: M, mods: Command, action: Minimize } |
||||||
|
#- { key: Q, mods: Command, action: Quit } |
||||||
|
#- { key: W, mods: Command, action: Quit } |
||||||
|
#- { key: N, mods: Command, action: SpawnNewInstance } |
||||||
|
#- { key: F, mods: Command|Control, action: ToggleFullscreen } |
||||||
|
#- { key: F, mods: Command, mode: ~Search, action: SearchForward } |
||||||
|
#- { key: B, mods: Command, mode: ~Search, action: SearchBackward } |
||||||
|
|
||||||
|
#debug: |
||||||
|
# Display the time it takes to redraw each frame. |
||||||
|
#render_timer: false |
||||||
|
|
||||||
|
# Keep the log file after quitting Alacritty. |
||||||
|
#persistent_logging: false |
||||||
|
|
||||||
|
# Log level |
||||||
|
# |
||||||
|
# Values for `log_level`: |
||||||
|
# - Off |
||||||
|
# - Error |
||||||
|
# - Warn |
||||||
|
# - Info |
||||||
|
# - Debug |
||||||
|
# - Trace |
||||||
|
#log_level: Warn |
||||||
|
|
||||||
|
# Print all received window events. |
||||||
|
#print_events: false |
@ -0,0 +1,110 @@ |
|||||||
|
env: |
||||||
|
TERM: xterm-256color |
||||||
|
|
||||||
|
scrolling: |
||||||
|
history: 5000 |
||||||
|
|
||||||
|
window: |
||||||
|
padding: |
||||||
|
x: 16 |
||||||
|
y: 16 |
||||||
|
|
||||||
|
colors: |
||||||
|
# Default colors |
||||||
|
primary: |
||||||
|
#background: '#000000' |
||||||
|
background: '#1B1B1B' |
||||||
|
foreground: '0xf8f8f2' |
||||||
|
|
||||||
|
cursor: |
||||||
|
text: '0x44475a' |
||||||
|
cursor: '0xf8f8f2' |
||||||
|
|
||||||
|
# Selection colors |
||||||
|
# |
||||||
|
# Colors which should be used to draw the selection area. If selection |
||||||
|
# background is unset, selection color will be the inverse of the cell colors. |
||||||
|
# If only text is unset the cell text color will remain the same. |
||||||
|
selection: |
||||||
|
text: '0xf8f8f2' |
||||||
|
background: '0x44475a' |
||||||
|
|
||||||
|
# Normal colors |
||||||
|
normal: |
||||||
|
black: '0x000000' |
||||||
|
red: '0xff5555' |
||||||
|
green: '0x50fa7b' |
||||||
|
yellow: '0xf1fa8c' |
||||||
|
blue: '0xbd93f9' |
||||||
|
magenta: '0xff79c6' |
||||||
|
cyan: '0x8be9fd' |
||||||
|
white: '0xbfbfbf' |
||||||
|
|
||||||
|
# Bright colors |
||||||
|
bright: |
||||||
|
black: '0x4d4d4d' |
||||||
|
red: '0xff6e67' |
||||||
|
green: '0x5af78e' |
||||||
|
yellow: '0xf4f99d' |
||||||
|
blue: '0xcaa9fa' |
||||||
|
magenta: '0xff92d0' |
||||||
|
cyan: '0x9aedfe' |
||||||
|
white: '0xe6e6e6' |
||||||
|
|
||||||
|
# Dim colors |
||||||
|
# |
||||||
|
# If the dim colors are not set, they will be calculated automatically based |
||||||
|
# on the `normal` colors. |
||||||
|
dim: |
||||||
|
black: '0x14151b' |
||||||
|
red: '0xff2222' |
||||||
|
green: '0x1ef956' |
||||||
|
yellow: '0xebf85b' |
||||||
|
blue: '0x4d5b86' |
||||||
|
magenta: '0xff46b0' |
||||||
|
cyan: '0x59dffc' |
||||||
|
white: '0xe6e6d1' |
||||||
|
|
||||||
|
# Indexed Colors |
||||||
|
# |
||||||
|
# The indexed colors include all colors from 16 to 256. |
||||||
|
# When these are not set, they're filled with sensible defaults. |
||||||
|
# |
||||||
|
# Example: |
||||||
|
# `- { index: 16, color: '0xff00ff' }` |
||||||
|
# |
||||||
|
indexed_colors: [] |
||||||
|
|
||||||
|
font: |
||||||
|
normal: |
||||||
|
family: monospace |
||||||
|
style: Regular |
||||||
|
|
||||||
|
bold: |
||||||
|
family: monospace |
||||||
|
style: Bold |
||||||
|
|
||||||
|
italic: |
||||||
|
family: monospace |
||||||
|
style: Italic |
||||||
|
|
||||||
|
bold_italic: |
||||||
|
family: monospace |
||||||
|
style: Bold Italic |
||||||
|
|
||||||
|
size: 6 |
||||||
|
|
||||||
|
# Key bindings |
||||||
|
Key_bindings: |
||||||
|
- { key: Equals, mods: Super, action: IncreaseFontSize } |
||||||
|
- { key: Subtract, mods: Super, action: DecreaseFontSize } |
||||||
|
- { key: Key0, mods: Super, action: ResetFontSize } |
||||||
|
- { key: PageUp, mods: Shift, action: ScrollPageUp } |
||||||
|
- { key: PageDown, mods: Shift, action: ScrollPageDown } |
||||||
|
- { key: End, mods: Shift, action: ScrollToBottom } |
||||||
|
- { key: Home, mods: Shift, action: ScrollToTop } |
||||||
|
- { key: V, mods: Control|Alt, action: Paste } |
||||||
|
- { key: C, mods: Control|Alt, action: Copy } |
||||||
|
- { key: Return, mods: Control, action: SpawnNewInstance } |
||||||
|
- { key: T, mods: Control, action: SpawnNewInstance } |
||||||
|
|
@ -0,0 +1,400 @@ |
|||||||
|
# This is the default config file. |
||||||
|
# It also shows all the default values, if you don't create the file. |
||||||
|
|
||||||
|
# All URL values may omit the scheme and/or port, as well as the beginning double slash |
||||||
|
# Valid URL examples: |
||||||
|
# gemini://example.com |
||||||
|
# //example.com |
||||||
|
# example.com |
||||||
|
# example.com:123 |
||||||
|
|
||||||
|
|
||||||
|
[a-general] |
||||||
|
# Press Ctrl-H to access it |
||||||
|
#home = "gemini://gemini.circumlunar.space" |
||||||
|
home = "gemini://simonkellet.xyz" |
||||||
|
# Follow up to 5 Gemini redirects without prompting. |
||||||
|
# A prompt is always shown after the 5th redirect and for redirects to protocols other than Gemini. |
||||||
|
# If set to false, a prompt will be shown before following redirects. |
||||||
|
auto_redirect = false |
||||||
|
|
||||||
|
# What command to run to open a HTTP(S) URL. |
||||||
|
# Set to "default" to try to guess the browser, or set to "off" to not open HTTP(S) URLs. |
||||||
|
# If a command is set, than the URL will be added (in quotes) to the end of the command. |
||||||
|
# A space will be prepended to the URL. |
||||||
|
# |
||||||
|
# The best to define a command is using a string array. |
||||||
|
# Examples: |
||||||
|
# http = ['firefox'] |
||||||
|
# http = ['custom-browser', '--flag', '--option=2'] |
||||||
|
# http = ['/path/with spaces/in it/firefox'] |
||||||
|
# |
||||||
|
# Note the use of single quotes, so that backslashes will not be escaped. |
||||||
|
# Using just a string will also work, but it is deprecated, and will degrade if |
||||||
|
# you use paths with spaces. |
||||||
|
|
||||||
|
http = 'default' |
||||||
|
|
||||||
|
# Any URL that will accept a query string can be put here |
||||||
|
search = "gemini://gus.guru/search" |
||||||
|
|
||||||
|
# Whether colors will be used in the terminal |
||||||
|
color = true |
||||||
|
|
||||||
|
# Whether ANSI color codes from the page content should be rendered |
||||||
|
ansi = true |
||||||
|
|
||||||
|
# Whether to replace list asterisks with unicode bullets |
||||||
|
bullets = true |
||||||
|
|
||||||
|
# Whether to show link after link text |
||||||
|
show_link = false |
||||||
|
|
||||||
|
# A number from 0 to 1, indicating what percentage of the terminal width the left margin should take up. |
||||||
|
left_margin = 0.15 |
||||||
|
|
||||||
|
# The max number of columns to wrap a page's text to. Preformatted blocks are not wrapped. |
||||||
|
max_width = 100 |
||||||
|
|
||||||
|
# 'downloads' is the path to a downloads folder. |
||||||
|
# An empty value means the code will find the default downloads folder for your system. |
||||||
|
# If the path does not exist it will be created. |
||||||
|
# Note the use of single quotes, so that backslashes will not be escaped. |
||||||
|
downloads = '' |
||||||
|
|
||||||
|
# Max size for displayable content in bytes - after that size a download window pops up |
||||||
|
page_max_size = 2097152 # 2 MiB |
||||||
|
# Max time it takes to load a page in seconds - after that a download window pops up |
||||||
|
page_max_time = 10 |
||||||
|
|
||||||
|
# Whether to replace tab numbers with emoji favicons, which are cached. |
||||||
|
emoji_favicons = true |
||||||
|
|
||||||
|
# When a scrollbar appears. "never", "auto", and "always" are the only valid values. |
||||||
|
# "auto" means the scrollbar only appears when the page is longer than the window. |
||||||
|
scrollbar = "auto" |
||||||
|
|
||||||
|
|
||||||
|
[auth] |
||||||
|
# Authentication settings |
||||||
|
# Note the use of single quotes for values, so that backslashes will not be escaped. |
||||||
|
|
||||||
|
[auth.certs] |
||||||
|
# Client certificates |
||||||
|
# Set domain name equal to path to client cert |
||||||
|
# "example.com" = 'mycert.crt' |
||||||
|
|
||||||
|
[auth.keys] |
||||||
|
# Client certificate keys |
||||||
|
# Set domain name equal to path to key for the client cert above |
||||||
|
# "example.com" = 'mycert.key' |
||||||
|
|
||||||
|
|
||||||
|
#[keybindings] |
||||||
|
# If you have a non-US keyboard, use bind_tab1 through bind_tab0 to |
||||||
|
# setup the shift-number bindings: Eg, for US keyboards (the default): |
||||||
|
# bind_tab1 = "!" |
||||||
|
# bind_tab2 = "@" |
||||||
|
# bind_tab3 = "#" |
||||||
|
# bind_tab4 = "$" |
||||||
|
# bind_tab5 = "%" |
||||||
|
# bind_tab6 = "^" |
||||||
|
# bind_tab7 = "&" |
||||||
|
# bind_tab8 = "*" |
||||||
|
# bind_tab9 = "(" |
||||||
|
# bind_tab0 = ")" |
||||||
|
|
||||||
|
|
||||||
|
[keybindings] |
||||||
|
bind_bottom = ":" |
||||||
|
bind_quit = "q" |
||||||
|
bind_reload = "r" |
||||||
|
bind_back = "H" |
||||||
|
bind_forward = "L" |
||||||
|
bind_next_tab = "J" |
||||||
|
bind_prev_tab = "K" |
||||||
|
bind_new_tab = "O" |
||||||
|
bind_close_tab = "D" |
||||||
|
bind_save = "S" |
||||||
|
bind_home = "h" |
||||||
|
bind_bookmarks = "b" |
||||||
|
bind_add_bookmark = "B" |
||||||
|
bind_edit = "e" |
||||||
|
# Whitespace is not allowed in any of the keybindings! Use 'Space' and 'Tab' to bind to those keys. |
||||||
|
# Multiple keys can be bound to one command, just use a TOML array. |
||||||
|
# To add the Alt modifier, the binding must start with Alt-, should be reasonably universal |
||||||
|
# Ctrl- won't work on all keys, see this for a list: |
||||||
|
# https://github.com/gdamore/tcell/blob/cb1e5d6fa606/key.go#L83 |
||||||
|
|
||||||
|
# An example of a TOML array for multiple keys being bound to one command is the default |
||||||
|
# binding for reload: |
||||||
|
# bind_reload = ["R","Ctrl-R"] |
||||||
|
# One thing to note here is that "R" is capitalization sensitive, so it means shift-r. |
||||||
|
# "Ctrl-R" means both ctrl-r and ctrl-shift-R (this is a quirk of what ctrl-r means on |
||||||
|
# an ANSI terminal) |
||||||
|
|
||||||
|
# The default binding for opening the bottom bar for entering a URL or link number is: |
||||||
|
# bind_bottom = "Space" |
||||||
|
# This is how to get the Spacebar as a keybinding, if you try to use " ", it won't work. |
||||||
|
# And, finally, an example of a simple, unmodified character is: |
||||||
|
# bind_edit = "e" |
||||||
|
# This binds the "e" key to the command to edit the current URL. |
||||||
|
|
||||||
|
# The bind_link[1-90] options are for the commands to go to the first 10 links on a page, |
||||||
|
# typically these are bound to the number keys: |
||||||
|
# bind_link1 = "1" |
||||||
|
# bind_link2 = "2" |
||||||
|
# bind_link3 = "3" |
||||||
|
# bind_link4 = "4" |
||||||
|
# bind_link5 = "5" |
||||||
|
# bind_link6 = "6" |
||||||
|
# bind_link7 = "7" |
||||||
|
# bind_link8 = "8" |
||||||
|
# bind_link9 = "9" |
||||||
|
# bind_link0 = "0" |
||||||
|
|
||||||
|
# All keybindings: |
||||||
|
# |
||||||
|
# bind_bottom |
||||||
|
# bind_edit |
||||||
|
# bind_home |
||||||
|
# bind_bookmarks |
||||||
|
# bind_add_bookmark |
||||||
|
# bind_save |
||||||
|
# bind_reload |
||||||
|
# bind_back |
||||||
|
# bind_forward |
||||||
|
# bind_pgup |
||||||
|
# bind_pgdn |
||||||
|
# bind_new_tab |
||||||
|
# bind_close_tab |
||||||
|
# bind_next_tab |
||||||
|
# bind_prev_tab |
||||||
|
# bind_quit |
||||||
|
# bind_help |
||||||
|
# bind_sub: for viewing the subscriptions page |
||||||
|
# bind_add_sub |
||||||
|
|
||||||
|
[url-handlers] |
||||||
|
# Allows setting the commands to run for various URL schemes. |
||||||
|
# E.g. to open FTP URLs with FileZilla set the following key: |
||||||
|
# ftp = 'filezilla' |
||||||
|
# You can set any scheme to "off" or "" to disable handling it, or |
||||||
|
# just leave the key unset. |
||||||
|
# |
||||||
|
# DO NOT use this for setting the HTTP command. |
||||||
|
# Use the http setting in the "a-general" section above. |
||||||
|
# |
||||||
|
# NOTE: These settings are overrided by the ones in the proxies section. |
||||||
|
# Note the use of single quotes, so that backslashes will not be escaped. |
||||||
|
|
||||||
|
# This is a special key that defines the handler for all URL schemes for which |
||||||
|
# no handler is defined. |
||||||
|
other = 'off' |
||||||
|
|
||||||
|
|
||||||
|
# [[mediatype-handlers]] section |
||||||
|
# --------------------------------- |
||||||
|
# |
||||||
|
# Specify what applications will open certain media types. |
||||||
|
# By default your default application will be used to open the file when you select "Open". |
||||||
|
# You only need to configure this section if you want to override your default application, |
||||||
|
# or do special things like streaming. |
||||||
|
# |
||||||
|
# Note the use of single quotes for commands, so that backslashes will not be escaped. |
||||||
|
# |
||||||
|
# |
||||||
|
# To open jpeg files with the feh command: |
||||||
|
# |
||||||
|
# [[mediatype-handlers]] |
||||||
|
# cmd = ['feh'] |
||||||
|
# types = ["image/jpeg"] |
||||||
|
# |
||||||
|
# Each command that you specify must come under its own [[mediatype-handlers]]. You may |
||||||
|
# specify as many [[mediatype-handlers]] as you want to setup multiple commands. |
||||||
|
# |
||||||
|
# If the subtype is omitted then the specified command will be used for the |
||||||
|
# entire type: |
||||||
|
# |
||||||
|
# [[mediatype-handlers]] |
||||||
|
# command = ['vlc', '--flag'] |
||||||
|
# types = ["audio", "video"] |
||||||
|
# |
||||||
|
# A catch-all handler can by specified with "*". |
||||||
|
# Note that there are already catch-all handlers in place for all OSes, |
||||||
|
# that open the file using your default application. This is only if you |
||||||
|
# want to override that. |
||||||
|
# |
||||||
|
# [[mediatype-handlers]] |
||||||
|
# cmd = ['some-command'] |
||||||
|
# types = [ |
||||||
|
# "application/pdf", |
||||||
|
# "*", |
||||||
|
# ] |
||||||
|
# |
||||||
|
# You can also choose to stream the data instead of downloading it all before |
||||||
|
# opening it. This is especially useful for large video or audio files, as |
||||||
|
# well as radio streams, which will never complete. You can do this like so: |
||||||
|
# |
||||||
|
# [[mediatype-handlers]] |
||||||
|
# cmd = ['vlc', '-'] |
||||||
|
# types = ["audio", "video"] |
||||||
|
# stream = true |
||||||
|
# |
||||||
|
# This uses vlc to stream all video and audio content. |
||||||
|
# By default stream is set to off for all handlers |
||||||
|
# |
||||||
|
# |
||||||
|
# If you want to always open a type in its viewer without the download or open |
||||||
|
# prompt appearing, you can add no_prompt = true |
||||||
|
# |
||||||
|
# [[mediatype-handlers]] |
||||||
|
# cmd = ['feh'] |
||||||
|
# types = ["image"] |
||||||
|
# no_prompt = true |
||||||
|
# |
||||||
|
# Note: Multiple handlers cannot be defined for the same full media type, but |
||||||
|
# still there needs to be an order for which handlers are used. The following |
||||||
|
# order applies regardless of the order written in the config: |
||||||
|
# |
||||||
|
# 1. Full media type: "image/jpeg" |
||||||
|
# 2. Just type: "image" |
||||||
|
# 3. Catch-all: "*" |
||||||
|
|
||||||
|
|
||||||
|
[cache] |
||||||
|
# Options for page cache - which is only for text pages |
||||||
|
# Increase the cache size to speed up browsing at the expense of memory |
||||||
|
# Zero values mean there is no limit |
||||||
|
|
||||||
|
max_size = 0 # Size in bytes |
||||||
|
max_pages = 30 # The maximum number of pages the cache will store |
||||||
|
|
||||||
|
# How long a page will stay in cache, in seconds. |
||||||
|
timeout = 1800 # 30 mins |
||||||
|
|
||||||
|
[proxies] |
||||||
|
# Allows setting a Gemini proxy for different schemes. |
||||||
|
# The settings are similar to the url-handlers section above. |
||||||
|
# E.g. to open a gopher page by connecting to a Gemini proxy server: |
||||||
|
# gopher = "example.com:123" |
||||||
|
# |
||||||
|
# Port 1965 is assumed if no port is specified. |
||||||
|
# |
||||||
|
# NOTE: These settings override any external handlers specified in |
||||||
|
# the url-handlers section. |
||||||
|
# |
||||||
|
# Note that HTTP and HTTPS are treated as separate protocols here. |
||||||
|
|
||||||
|
|
||||||
|
[subscriptions] |
||||||
|
# For tracking feeds and pages |
||||||
|
|
||||||
|
# Whether a pop-up appears when viewing a potential feed |
||||||
|
popup = true |
||||||
|
|
||||||
|
# How often to check for updates to subscriptions in the background, in seconds. |
||||||
|
# Set it to 0 to disable this feature. You can still update individual feeds |
||||||
|
# manually, or restart the browser. |
||||||
|
# |
||||||
|
# Note Amfora will check for updates on browser start no matter what this setting is. |
||||||
|
update_interval = 1800 # 30 mins |
||||||
|
|
||||||
|
# How many subscriptions can be checked at the same time when updating. |
||||||
|
# If you have many subscriptions you may want to increase this for faster |
||||||
|
# update times. Any value below 1 will be corrected to 1. |
||||||
|
workers = 3 |
||||||
|
|
||||||
|
# The number of subscription updates displayed per page. |
||||||
|
entries_per_page = 20 |
||||||
|
|
||||||
|
|
||||||
|
[theme] |
||||||
|
# This section is for changing the COLORS used in Amfora. |
||||||
|
# These colors only apply if 'color' is enabled above. |
||||||
|
# Colors can be set using a W3C color name, or a hex value such as "#ffffff". |
||||||
|
|
||||||
|
# Note that not all colors will work on terminals that do not have truecolor support. |
||||||
|
# If you want to stick to the standard 16 or 256 colors, you can get |
||||||
|
# a list of those here: /https://jonasjacek.github.io/colors/ |
||||||
|
# DO NOT use the names from that site, just the hex codes. |
||||||
|
|
||||||
|
# Definitions: |
||||||
|
# bg = background |
||||||
|
# fg = foreground |
||||||
|
# dl = download |
||||||
|
# btn = button |
||||||
|
# hdg = heading |
||||||
|
# bkmk = bookmark |
||||||
|
# modal = a popup window/box in the middle of the screen |
||||||
|
|
||||||
|
# EXAMPLES: |
||||||
|
# hdg_1 = "green" |
||||||
|
# hdg_2 = "#5f0000" |
||||||
|
|
||||||
|
# Available keys to set: |
||||||
|
bg = "#282c34" |
||||||
|
tab_num = "#3071db" |
||||||
|
tab_divider = "#5699af" |
||||||
|
bottombar_label = "#98be65" |
||||||
|
bottombar_text = "#7d7d7d" |
||||||
|
bottombar_bg = "#202328" |
||||||
|
|
||||||
|
hdg_1 = "#ff6c6b" |
||||||
|
hdg_2 = "#51afef" |
||||||
|
hdg_3 = "#4669ff" |
||||||
|
amfora_link = "#c678dd" |
||||||
|
foreign_link = "#98be65" |
||||||
|
link_number = "#7d7d7d" |
||||||
|
regular_text = "#ffffff" |
||||||
|
quote_text = "#a9a1e1" |
||||||
|
preformatted_text = "#ecbe7b" |
||||||
|
list_text = "#bbc2cf" |
||||||
|
|
||||||
|
# bg: background for pages, tab row, app in general |
||||||
|
# tab_num: The number/highlight of the tabs at the top |
||||||
|
# tab_divider: The color of the divider character between tab numbers: | |
||||||
|
# bottombar_label: The color of the prompt that appears when you press space |
||||||
|
# bottombar_text: The color of the text you type |
||||||
|
# bottombar_bg |
||||||
|
# scrollbar: The scrollbar that appears on the right for long pages |
||||||
|
|
||||||
|
# hdg_1 |
||||||
|
# hdg_2 |
||||||
|
# hdg_3 |
||||||
|
# amfora_link: A link that Amfora supports viewing. For now this is only gemini:// |
||||||
|
# foreign_link: HTTP(S), Gopher, etc |
||||||
|
# link_number: The silver number that appears to the left of a link |
||||||
|
# regular_text: Normal gemini text, and plaintext documents |
||||||
|
# quote_text |
||||||
|
# preformatted_text |
||||||
|
# list_text |
||||||
|
|
||||||
|
# btn_bg: The bg color for all modal buttons |
||||||
|
# btn_text: The text color for all modal buttons |
||||||
|
|
||||||
|
# dl_choice_modal_bg |
||||||
|
# dl_choice_modal_text |
||||||
|
# dl_modal_bg |
||||||
|
# dl_modal_text |
||||||
|
# info_modal_bg |
||||||
|
# info_modal_text |
||||||
|
# error_modal_bg |
||||||
|
# error_modal_text |
||||||
|
# yesno_modal_bg |
||||||
|
# yesno_modal_text |
||||||
|
# tofu_modal_bg |
||||||
|
# tofu_modal_text |
||||||
|
# subscription_modal_bg |
||||||
|
# subscription_modal_text |
||||||
|
|
||||||
|
# input_modal_bg |
||||||
|
# input_modal_text |
||||||
|
# input_modal_field_bg: The bg of the input field, where you type the text |
||||||
|
# input_modal_field_text: The color of the text you type |
||||||
|
|
||||||
|
# bkmk_modal_bg |
||||||
|
# bkmk_modal_text |
||||||
|
# bkmk_modal_label |
||||||
|
# bkmk_modal_field_bg |
||||||
|
# bkmk_modal_field_text |
@ -0,0 +1,3 @@ |
|||||||
|
json:{ |
||||||
|
"output_profile": "kindle_pw3" |
||||||
|
} |
@ -0,0 +1,15 @@ |
|||||||
|
{ |
||||||
|
"add books dialog dir": "/home/simon/Downloads/Test files", |
||||||
|
"sort_history": [ |
||||||
|
[ |
||||||
|
"timestamp", |
||||||
|
false |
||||||
|
], |
||||||
|
[ |
||||||
|
"timestamp", |
||||||
|
false |
||||||
|
] |
||||||
|
], |
||||||
|
"welcome_wizard_device": "kindle_pw", |
||||||
|
"welcome_wizard_was_run": true |
||||||
|
} |
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,50 @@ |
|||||||
|
{ |
||||||
|
"add_formats_to_existing": false, |
||||||
|
"case_sensitive": false, |
||||||
|
"check_for_dupes_on_ctl": false, |
||||||
|
"database_path": "/home/simon/library1.db", |
||||||
|
"filename_pattern": "(?P<title>.+) - (?P<author>[^_]+)", |
||||||
|
"input_format_order": [ |
||||||
|
"EPUB", |
||||||
|
"AZW3", |
||||||
|
"MOBI", |
||||||
|
"LIT", |
||||||
|
"PRC", |
||||||
|
"FB2", |
||||||
|
"HTML", |
||||||
|
"HTM", |
||||||
|
"XHTM", |
||||||
|
"SHTML", |
||||||
|
"XHTML", |
||||||
|
"ZIP", |
||||||
|
"DOCX", |
||||||
|
"ODT", |
||||||
|
"RTF", |
||||||
|
"PDF", |
||||||
|
"TXT" |
||||||
|
], |
||||||
|
"installation_uuid": "9c03fad4-0252-48ad-acc5-b9146eef4535", |
||||||
|
"isbndb_com_key": "", |
||||||
|
"language": "en_GB", |
||||||
|
"library_path": "/home/simon/Calibre Library", |
||||||
|
"limit_search_columns": false, |
||||||
|
"limit_search_columns_to": [ |
||||||
|
"title", |
||||||
|
"authors", |
||||||
|
"tags", |
||||||
|
"series", |
||||||
|
"publisher" |
||||||
|
], |
||||||
|
"manage_device_metadata": "manual", |
||||||
|
"mark_new_books": false, |
||||||
|
"migrated": false, |
||||||
|
"network_timeout": 5, |
||||||
|
"new_book_tags": [], |
||||||
|
"output_format": "mobi", |
||||||
|
"read_file_metadata": true, |
||||||
|
"saved_searches": {}, |
||||||
|
"swap_author_names": false, |
||||||
|
"use_primary_find_in_search": true, |
||||||
|
"user_categories": {}, |
||||||
|
"worker_process_priority": "normal" |
||||||
|
} |
@ -0,0 +1,151 @@ |
|||||||
|
{ |
||||||
|
"book_details_splitter_horizontal_state": [ |
||||||
|
true, |
||||||
|
200 |
||||||
|
], |
||||||
|
"book_list_pin_splitter_state": { |
||||||
|
"__class__": "bytearray", |
||||||
|
"__value__": "AAAA/wAAAAEAAAACAAABAAAAAEYA/////wEAAAABAA==" |
||||||
|
}, |
||||||
|
"convert_bulk_dialog_geom": { |
||||||
|
"__class__": "bytearray", |
||||||
|
"__value__": "AdnQywADAAAAAAAZAAAACgAAB1YAAAPfAAAAGwAAAAoAAAdUAAAD3QAAAAAAAAAAB4AAAAAbAAAACgAAB1QAAAPd" |
||||||
|
}, |
||||||
|
"convert_single_dialog_geom": { |
||||||
|
"__class__": "bytearray", |
||||||
|
"__value__": "AdnQywADAAAAAAAdAAAAFAAAB1oAAAPpAAAAHwAAABQAAAdYAAAD5wAAAAAAAAAAB4AAAAAfAAAAFAAAB1gAAAPn" |
||||||
|
}, |
||||||
|
"cover_browser_splitter_vertical_state": [ |
||||||
|
false, |
||||||
|
300 |
||||||
|
], |
||||||
|
"custom_colors_for_color_dialog": [ |
||||||
|
[ |
||||||
|
255, |
||||||
|
255, |
||||||
|
255, |
||||||
|
255 |
||||||
|
], |
||||||
|
[ |
||||||
|
255, |
||||||
|
255, |
||||||
|
255, |
||||||
|
255 |
||||||
|
], |
||||||
|
[ |
||||||
|
255, |
||||||
|
255, |
||||||
|
255, |
||||||
|
255 |
||||||
|
], |
||||||
|
[ |
||||||
|
255, |
||||||
|
255, |
||||||
|
255, |
||||||
|
255 |
||||||
|
], |
||||||
|
[ |
||||||
|
255, |
||||||
|
255, |
||||||
|
255, |
||||||
|
255 |
||||||
|
], |
||||||
|
[ |
||||||
|
255, |
||||||
|
255, |
||||||
|
255, |
||||||
|
255 |
||||||
|
], |
||||||
|
[ |
||||||
|
255, |
||||||
|
255, |
||||||
|
255, |
||||||
|
255 |
||||||
|
], |
||||||
|
[ |
||||||
|
255, |
||||||
|
255, |
||||||
|
255, |
||||||
|
255 |
||||||
|
], |
||||||
|
[ |
||||||
|
255, |
||||||
|
255, |
||||||
|
255, |
||||||
|
255 |
||||||
|
], |
||||||
|
[ |
||||||
|
255, |
||||||
|
255, |
||||||
|
255, |
||||||
|
255 |
||||||
|
], |
||||||
|
[ |
||||||
|
255, |
||||||
|
255, |
||||||
|
255, |
||||||
|
255 |
||||||
|
], |
||||||
|
[ |
||||||
|
255, |
||||||
|
255, |
||||||
|
255, |
||||||
|
255 |
||||||
|
], |
||||||
|
[ |
||||||
|
255, |
||||||
|
255, |
||||||
|
255, |
||||||
|
255 |
||||||
|
], |
||||||
|
[ |
||||||
|
255, |
||||||
|
255, |
||||||
|
255, |
||||||
|
255 |
||||||
|
], |
||||||
|
[ |
||||||
|
255, |
||||||
|
255, |
||||||
|
255, |
||||||
|
255 |
||||||
|
], |
||||||
|
[ |
||||||
|
255, |
||||||
|
255, |
||||||
|
255, |
||||||
|
255 |
||||||
|
] |
||||||
|
], |
||||||
|
"grid view visible": false, |
||||||
|
"jobs view column layout3": { |
||||||
|
"__class__": "bytearray", |
||||||
|
"__value__": "AAAA/wAAAAAAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAFAQEBAAAAAAAAAAAAAAAAAGT/////AAAAhAAAAAAAAAAFAAAAZAAAAAEAAAAAAAAAZAAAAAEAAAAAAAAAZAAAAAEAAAAAAAAAZAAAAAEAAAAAAAAAZAAAAAEAAAAAAAAD6AAAAAAA" |
||||||
|
}, |
||||||
|
"jobs_dialog_geometry": { |
||||||
|
"__class__": "bytearray", |
||||||
|
"__value__": "AdnQywADAAAAAAQTAAABhwAABo8AAAOmAAAEFQAAAYcAAAaNAAADpAAAAAAAAAAAB4AAAAQVAAABhwAABo0AAAOk" |
||||||
|
}, |
||||||
|
"library_usage_stats": { |
||||||
|
"/home/simon/Calibre Library": 4 |
||||||
|
}, |
||||||
|
"quick_start_guide_added": true, |
||||||
|
"quickview visible": false, |
||||||
|
"replace_scene_breaks_history": [ |
||||||
|
"", |
||||||
|
"<hr />", |
||||||
|
"∗ ∗ ∗", |
||||||
|
"• • •", |
||||||
|
"♦ ♦ ♦", |
||||||
|
"† †", |
||||||
|
"‡ ‡ ‡", |
||||||
|
"∞ ∞ ∞", |
||||||
|
"¤ ¤ ¤" |
||||||
|
], |
||||||
|
"search bar visible": true, |
||||||
|
"tag browser search box visible": false, |
||||||
|
"tag_browser_splitter_horizontal_state": [ |
||||||
|
true, |
||||||
|
200 |
||||||
|
] |
||||||
|
} |
@ -0,0 +1,79 @@ |
|||||||
|
{ |
||||||
|
"LRF_conversion_defaults": [], |
||||||
|
"LRF_ebook_viewer_options": null, |
||||||
|
"asked_library_thing_password": false, |
||||||
|
"auto_download_cover": false, |
||||||
|
"autolaunch_server": false, |
||||||
|
"column_map": [ |
||||||
|
"title", |
||||||
|
"ondevice", |
||||||
|
"authors", |
||||||
|
"size", |
||||||
|
"timestamp", |
||||||
|
"rating", |
||||||
|
"publisher", |
||||||
|
"tags", |
||||||
|
"series", |
||||||
|
"pubdate" |
||||||
|
], |
||||||
|
"confirm_delete": false, |
||||||
|
"cover_flow_queue_length": 6, |
||||||
|
"default_send_to_device_action": "DeviceAction:main::False:False", |
||||||
|
"delete_news_from_library_on_upload": false, |
||||||
|
"disable_animations": false, |
||||||
|
"disable_tray_notification": false, |
||||||
|
"enforce_cpu_limit": true, |
||||||
|
"get_social_metadata": true, |
||||||
|
"gui_layout": "wide", |
||||||
|
"highlight_search_matches": false, |
||||||
|
"internally_viewed_formats": [ |
||||||
|
"LRF", |
||||||
|
"EPUB", |
||||||
|
"LIT", |
||||||
|
"MOBI", |
||||||
|
"PRC", |
||||||
|
"POBI", |
||||||
|
"AZW", |
||||||
|
"AZW3", |
||||||
|
"HTML", |
||||||
|
"FB2", |
||||||
|
"FBZ", |
||||||
|
"PDB", |
||||||
|
"RB", |
||||||
|
"SNB", |
||||||
|
"HTMLZ", |
||||||
|
"KEPUB" |
||||||
|
], |
||||||
|
"jobs_search_history": [], |
||||||
|
"lrf_viewer_search_history": [], |
||||||
|
"main_search_history": [], |
||||||
|
"main_window_geometry": { |
||||||
|
"__class__": "bytearray", |
||||||
|
"__value__": "AdnQywADAAAAAAAAAAAAFgAAB38AAAQ3AAAAAAAAABYAAAd/AAAENwAAAAAAAAAAB4AAAAAAAAAAFgAAB38AAAQ3" |
||||||
|
}, |
||||||
|
"match_tags_type": "any", |
||||||
|
"new_version_notification": true, |
||||||
|
"oldest_news": 60, |
||||||
|
"overwrite_author_title_metadata": true, |
||||||
|
"plugin_search_history": [], |
||||||
|
"save_to_disk_template_history": [], |
||||||
|
"scheduler_search_history": [], |
||||||
|
"search_as_you_type": false, |
||||||
|
"send_to_device_template_history": [], |
||||||
|
"send_to_storage_card_by_default": false, |
||||||
|
"separate_cover_flow": false, |
||||||
|
"shortcuts_search_history": [], |
||||||
|
"show_avg_rating": true, |
||||||
|
"sort_tags_by": "name", |
||||||
|
"systray_icon": false, |
||||||
|
"tag_browser_hidden_categories": { |
||||||
|
"__class__": "set", |
||||||
|
"__value__": [] |
||||||
|
}, |
||||||
|
"tweaks_search_history": [], |
||||||
|
"upload_news_to_device": true, |
||||||
|
"use_roman_numerals_for_series_number": true, |
||||||
|
"viewer_search_history": [], |
||||||
|
"viewer_toc_search_history": [], |
||||||
|
"worker_limit": 6 |
||||||
|
} |
@ -0,0 +1,32 @@ |
|||||||
|
{ |
||||||
|
"main_window_geometry": { |
||||||
|
"__class__": "bytearray", |
||||||
|
"__value__": "AdnQywADAAAAAAPAAAAAFgAAB38AAAQ3AAADxAAAABoAAAd7AAAEMwAAAAAAAAAAB4AAAAPEAAAAGgAAB3sAAAQz" |
||||||
|
}, |
||||||
|
"main_window_state": { |
||||||
|
"__class__": "bytearray", |
||||||
|
"__value__": "AAAA/wAAAAH9AAAAAgAAAAAAAAAAAAAAAPwCAAAAAvsAAAAQAHQAbwBjAC0AZABvAGMAawAAAAAA/////wAAAIcA////+wAAABYAcwBlAGEAcgBjAGgALQBkAG8AYwBrAAAAAAD/////AAAAlQD///8AAAABAAAAAAAAAAD8AgAAAAT7AAAAFgBsAG8AbwBrAHUAcAAtAGQAbwBjAGsAAAAAAP////8AAAB9AP////sAAAAcAGIAbwBvAGsAbQBhAHIAawBzAC0AZABvAGMAawAAAAAA/////wAAAOcA////+wAAABwAaQBuAHMAcABlAGMAdABvAHIALQBkAG8AYwBrAAAAAAD/////AAAAEwD////7AAAAHgBoAGkAZwBoAGwAaQBnAGgAdABzAC0AZABvAGMAawAAAAAA/////wAAAMkA////AAADuAAABBoAAAAEAAAABAAAAAgAAAAI/AAAAAEAAAAAAAAAAQAAAB4AYQBjAHQAaQBvAG4AcwBfAHQAbwBvAGwAYgBhAHICAAAAAP////8AAAAAAAAAAA==" |
||||||
|
}, |
||||||
|
"old_prefs_migrated": true, |
||||||
|
"session_data": { |
||||||
|
"controls_help_shown_count": 1, |
||||||
|
"standalone_font_settings": {}, |
||||||
|
"standalone_misc_settings": { |
||||||
|
"remember_last_read": true, |
||||||
|
"remember_window_geometry": false, |
||||||
|
"save_annotations_in_ebook": true, |
||||||
|
"singleinstance": false |
||||||
|
}, |
||||||
|
"standalone_recently_opened": [ |
||||||
|
{ |
||||||
|
"authors": [ |
||||||
|
"maaz sedu" |
||||||
|
], |
||||||
|
"key": "/home/simon/Calibre Library/maaz sedu/A STUDY OF THERMO-STRUCTURAL EFFECTS IN A ROCKET COMBUSTION CHAMBER (2)/A STUDY OF THERMO-STRUCTURAL EFFECTS IN A - maaz sedu.epub", |
||||||
|
"pathtoebook": "/home/simon/Calibre Library/maaz sedu/A STUDY OF THERMO-STRUCTURAL EFFECTS IN A ROCKET COMBUSTION CHAMBER (2)/A STUDY OF THERMO-STRUCTURAL EFFECTS IN A - maaz sedu.epub", |
||||||
|
"timestamp": "2021-09-20T13:47:33.274Z", |
||||||
|
"title": "A STUDY OF THERMO-STRUCTURAL EFFECTS IN A ROCKET COMBUSTION CHAMBER" |
||||||
|
} |
||||||
|
] |
||||||
|
} |
||||||
|
} |
@ -0,0 +1 @@ |
|||||||
|
[{"pos": "epubcfi(/4/2/4/6/2@50.67:76.52)", "pos_type": "epubcfi", "timestamp": "2021-09-20T13:47:37.367067+00:00", "type": "last-read"}] |
@ -0,0 +1,182 @@ |
|||||||
|
# This file has been auto-generated by i3-config-wizard(1). |
||||||
|
# It will not be overwritten, so edit it as you like. |
||||||
|
# |
||||||
|
# Should you change your keyboard layout some time, delete |
||||||
|
# this file and re-run i3-config-wizard(1). |
||||||
|
# |
||||||
|
|
||||||
|
# i3 config file (v4) |
||||||
|
# |
||||||
|
# Please see https://i3wm.org/docs/userguide.html for a complete reference! |
||||||
|
|
||||||
|
set $mod Mod4 |
||||||
|
|
||||||
|
# Font for window titles. Will also be used by the bar unless a different font |
||||||
|
# is used in the bar {} block below. |
||||||
|
font pango:monospace 8 |
||||||
|
|
||||||
|
# This font is widely installed, provides lots of unicode glyphs, right-to-left |
||||||
|
# text rendering and scalability on retina/hidpi displays (thanks to pango). |
||||||
|
#font pango:DejaVu Sans Mono 8 |
||||||
|
|
||||||
|
# The combination of xss-lock, nm-applet and pactl is a popular choice, so |
||||||
|
# they are included here as an example. Modify as you see fit. |
||||||
|
|
||||||
|
# xss-lock grabs a logind suspend inhibit lock and will use i3lock to lock the |
||||||
|
# screen before suspend. Use loginctl lock-session to lock your screen. |
||||||
|
exec --no-startup-id xss-lock --transfer-sleep-lock -- i3lock --nofork |
||||||
|
|
||||||
|
# NetworkManager is the most popular way to manage wireless networks on Linux, |
||||||
|
# and nm-applet is a desktop environment-independent system tray GUI for it. |
||||||
|
exec --no-startup-id nm-applet |
||||||
|
|
||||||
|
# Use pactl to adjust volume in PulseAudio. |
||||||
|
set $refresh_i3status killall -SIGUSR1 i3status |
||||||
|
bindsym XF86AudioRaiseVolume exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ +10% && $refresh_i3status |
||||||
|
bindsym XF86AudioLowerVolume exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ -10% && $refresh_i3status |
||||||
|
bindsym XF86AudioMute exec --no-startup-id pactl set-sink-mute @DEFAULT_SINK@ toggle && $refresh_i3status |
||||||
|
bindsym XF86AudioMicMute exec --no-startup-id pactl set-source-mute @DEFAULT_SOURCE@ toggle && $refresh_i3status |
||||||
|
|
||||||
|
# Use Mouse+$mod to drag floating windows to their wanted position |
||||||
|
floating_modifier $mod |
||||||
|
|
||||||
|
# start a terminal |
||||||
|
bindsym $mod+Return exec i3-sensible-terminal |
||||||
|
|
||||||
|
# kill focused window |
||||||
|
bindsym $mod+Shift+q kill |
||||||
|
|
||||||
|
# start dmenu (a program launcher) |
||||||
|
bindsym $mod+d exec --no-startup-id dmenu_run |
||||||
|
# A more modern dmenu replacement is rofi: |
||||||
|
# bindcode $mod+40 exec "rofi -modi drun,run -show drun" |
||||||
|
# There also is i3-dmenu-desktop which only displays applications shipping a |
||||||
|
# .desktop file. It is a wrapper around dmenu, so you need that installed. |
||||||
|
# bindcode $mod+40 exec --no-startup-id i3-dmenu-desktop |
||||||
|
|
||||||
|
# change focus |
||||||
|
bindsym $mod+j focus left |
||||||
|
bindsym $mod+k focus down |
||||||
|
bindsym $mod+l focus up |
||||||
|
bindsym $mod+semicolon focus right |
||||||
|
|
||||||
|
# alternatively, you can use the cursor keys: |
||||||
|
bindsym $mod+Left focus left |
||||||
|
bindsym $mod+Down focus down |
||||||
|
bindsym $mod+Up focus up |
||||||
|
bindsym $mod+Right focus right |
||||||
|
|
||||||
|
# move focused window |
||||||
|
bindsym $mod+Shift+j move left |
||||||
|
bindsym $mod+Shift+k move down |
||||||
|
bindsym $mod+Shift+l move up |
||||||
|
bindsym $mod+Shift+semicolon move right |
||||||
|
|
||||||
|
# alternatively, you can use the cursor keys: |
||||||
|
bindsym $mod+Shift+Left move left |
||||||
|
bindsym $mod+Shift+Down move down |
||||||
|
bindsym $mod+Shift+Up move up |
||||||
|
bindsym $mod+Shift+Right move right |
||||||
|
|
||||||
|
# split in horizontal orientation |
||||||
|
bindsym $mod+h split h |
||||||
|
|
||||||
|
# split in vertical orientation |
||||||
|
bindsym $mod+v split v |
||||||
|
|
||||||
|
# enter fullscreen mode for the focused container |
||||||
|
bindsym $mod+f fullscreen toggle |
||||||
|
|
||||||
|
# change container layout (stacked, tabbed, toggle split) |
||||||
|
bindsym $mod+s layout stacking |
||||||
|
bindsym $mod+w layout tabbed |
||||||
|
bindsym $mod+e layout toggle split |
||||||
|
|
||||||
|
# toggle tiling / floating |
||||||
|
bindsym $mod+Shift+space floating toggle |
||||||
|
|
||||||
|
# change focus between tiling / floating windows |
||||||
|
bindsym $mod+space focus mode_toggle |
||||||
|
|
||||||
|
# focus the parent container |
||||||
|
bindsym $mod+a focus parent |
||||||
|
|
||||||
|
# focus the child container |
||||||
|
#bindsym $mod+d focus child |
||||||
|
|
||||||
|
# Define names for default workspaces for which we configure key bindings later on. |
||||||
|
# We use variables to avoid repeating the names in multiple places. |
||||||
|
set $ws1 "1" |
||||||
|
set $ws2 "2" |
||||||
|
set $ws3 "3" |
||||||
|
set $ws4 "4" |
||||||
|
set $ws5 "5" |
||||||
|
set $ws6 "6" |
||||||
|
set $ws7 "7" |
||||||
|
set $ws8 "8" |
||||||
|
set $ws9 "9" |
||||||
|
set $ws10 "10" |
||||||
|
|
||||||
|
# switch to workspace |
||||||
|
bindsym $mod+1 workspace number $ws1 |
||||||
|
bindsym $mod+2 workspace number $ws2 |
||||||
|
bindsym $mod+3 workspace number $ws3 |
||||||
|
bindsym $mod+4 workspace number $ws4 |
||||||
|
bindsym $mod+5 workspace number $ws5 |
||||||
|
bindsym $mod+6 workspace number $ws6 |
||||||
|
bindsym $mod+7 workspace number $ws7 |
||||||
|
bindsym $mod+8 workspace number $ws8 |
||||||
|
bindsym $mod+9 workspace number $ws9 |
||||||
|
bindsym $mod+0 workspace number $ws10 |
||||||
|
|
||||||
|
# move focused container to workspace |
||||||
|
bindsym $mod+Shift+1 move container to workspace number $ws1 |
||||||
|
bindsym $mod+Shift+2 move container to workspace number $ws2 |
||||||
|
bindsym $mod+Shift+3 move container to workspace number $ws3 |
||||||
|
bindsym $mod+Shift+4 move container to workspace number $ws4 |
||||||
|
bindsym $mod+Shift+5 move container to workspace number $ws5 |
||||||
|
bindsym $mod+Shift+6 move container to workspace number $ws6 |
||||||
|
bindsym $mod+Shift+7 move container to workspace number $ws7 |
||||||
|
bindsym $mod+Shift+8 move container to workspace number $ws8 |
||||||
|
bindsym $mod+Shift+9 move container to workspace number $ws9 |
||||||
|
bindsym $mod+Shift+0 move container to workspace number $ws10 |
||||||
|
|
||||||
|
# reload the configuration file |
||||||
|
bindsym $mod+Shift+c reload |
||||||
|
# restart i3 inplace (preserves your layout/session, can be used to upgrade i3) |
||||||
|
bindsym $mod+Shift+r restart |
||||||
|
# exit i3 (logs you out of your X session) |
||||||
|
bindsym $mod+Shift+e exec "i3-nagbar -t warning -m 'You pressed the exit shortcut. Do you really want to exit i3? This will end your X session.' -B 'Yes, exit i3' 'i3-msg exit'" |
||||||
|
|
||||||
|
# resize window (you can also use the mouse for that) |
||||||
|
mode "resize" { |
||||||
|
# These bindings trigger as soon as you enter the resize mode |
||||||
|
|
||||||
|
# Pressing left will shrink the window’s width. |
||||||
|
# Pressing right will grow the window’s width. |
||||||
|
# Pressing up will shrink the window’s height. |
||||||
|
# Pressing down will grow the window’s height. |
||||||
|
bindsym j resize shrink width 10 px or 10 ppt |
||||||
|
bindsym k resize grow height 10 px or 10 ppt |
||||||
|
bindsym l resize shrink height 10 px or 10 ppt |
||||||
|
bindsym semicolon resize grow width 10 px or 10 ppt |
||||||
|
|
||||||
|
# same bindings, but for the arrow keys |
||||||
|
bindsym Left resize shrink width 10 px or 10 ppt |
||||||
|
bindsym Down resize grow height 10 px or 10 ppt |
||||||
|
bindsym Up resize shrink height 10 px or 10 ppt |
||||||
|
bindsym Right resize grow width 10 px or 10 ppt |
||||||
|
|
||||||
|
# back to normal: Enter or Escape or $mod+r |
||||||
|
bindsym Return mode "default" |
||||||
|
bindsym Escape mode "default" |
||||||
|
bindsym $mod+r mode "default" |
||||||
|
} |
||||||
|
|
||||||
|
bindsym $mod+r mode "resize" |
||||||
|
|
||||||
|
# Start i3bar to display a workspace bar (plus the system information i3status |
||||||
|
# finds out, if available) |
||||||
|
bar { |
||||||
|
status_command i3status |
||||||
|
} |
@ -0,0 +1,343 @@ |
|||||||
|
# This file has been auto-generated by i3-config-wizard(1). |
||||||
|
# It will not be overwritten, so edit it as you like. |
||||||
|
# |
||||||
|
# Should you change your keyboard layout some time, delete |
||||||
|
# this file and re-run i3-config-wizard(1). |
||||||
|
# |
||||||
|
|
||||||
|
# i3 config file (v4) |
||||||
|
# |
||||||
|
# Please see https://i3wm.org/docs/userguide.html for a complete reference! |
||||||
|
set $mod Mod4 |
||||||
|
set $alt Mod1 |
||||||
|
set $coloract "#ff00c1" |
||||||
|
set $colorin "#c387b5" |
||||||
|
set_from_resource $white i3wm.color15 "#fefbec" |
||||||
|
set_from_resource $split i3wm.color10 "#9E664B0" |
||||||
|
# Font for window titles. Will also be used by the bar unless a different font |
||||||
|
# is used in the bar {} block below. |
||||||
|
#font pango: Source Code Pro 12px |
||||||
|
font pango: IBM Plex Mono 11px |
||||||
|
#font pango: JetBrains Mono 8 |
||||||
|
# This font is widely installed, provides lots of unicode glyphs, right-to-left |
||||||
|
# text rendering and scalability on retina/hidpi displays (thanks to pango). |
||||||
|
#font pango:DejaVu Sans Mono 8 |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# ------------------------- OLD COLORS ------------------------- |
||||||
|
#set $fg-color #fdfff1 |
||||||
|
#set $bg-color #272821 |
||||||
|
#set $contrast-color #3b3c35 |
||||||
|
#set $red-color #f82570 |
||||||
|
#set $green-color #a6e12d |
||||||
|
#set $yellow-color #e4db73 |
||||||
|
#set $orange-color #fc961f |
||||||
|
#set $purple-color #ae81ff |
||||||
|
|
||||||
|
# class border backgr. text indicator child_border |
||||||
|
#client.focused $contrast-color $bg-color $yellow-color $contrast-color $yellow-color |
||||||
|
#client.focused_inactive $bg-color $bg-color $yellow-color $bg-color $bg-color |
||||||
|
#client.unfocused $bg-color $bg-color $contrast-color $bg-color $bg-color |
||||||
|
#client.urgent $red-color $bg-color $red-color $red-color $red-color |
||||||
|
#client.placeholder $bg-color $bg-color $yellow-color $bg-color $bg-color |
||||||
|
#client.background $fg-color |
||||||
|
|
||||||
|
# ------------------------- NEW COLORS ------------------------- |
||||||
|
# class border backgr. text indicator child_border |
||||||
|
client.focused $coloract $coloract $white $split $coloract |
||||||
|
client.focused_inactive $coloract $coloract $white $split $coloract |
||||||
|
client.unfocused $colorin $colorin #888888 $split $colorin |
||||||
|
client.urgent #2f343a #900000 $white #900000 #900000 |
||||||
|
client.placeholder #000000 #0c0c0c $white #000000 #0c0c0c |
||||||
|
|
||||||
|
client.background #ffffff |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# The combination of xss-lock, nm-applet and pactl is a popular choice, so |
||||||
|
# they are included here as an example. Modify as you see fit. |
||||||
|
|
||||||
|
# xss-lock grabs a logind suspend inhibit lock and will use i3lock to lock the |
||||||
|
# screen before suspend. Use loginctl lock-session to lock your screen. |
||||||
|
exec --no-startup-id xss-lock --transfer-sleep-lock -- i3lock --nofork |
||||||
|
|
||||||
|
# NetworkManager is the most popular way to manage wireless networks on Linux, |
||||||
|
# and nm-applet is a desktop environment-independent system tray GUI for it. |
||||||
|
exec --no-startup-id nm-applet |
||||||
|
exec --no-startup-id redshift |
||||||
|
#exec --no-startup-id teams |
||||||
|
#exec --no-startup-id i3-msg 'workspace 10; exec teams' |
||||||
|
#exec --no-startup-id i3-msg 'workspace 9; exec discord' |
||||||
|
#exec --no-startup-id discord |
||||||
|
#exec --no-startup-id nitrogen --restore |
||||||
|
exec --no-startup-id nitrogen --set-zoom-fill --save /home/simon/Pictures/wallpapers/vidar-nordli-mathisen-Sk32_wG8lcQ-unsplash.jpg |
||||||
|
#exec --no-startup-id wpg -mi && wpg --brt $(wpg -c) 10.6 && wpg -s $(wpg -c) |
||||||
|
exec --no-startup-id guake |
||||||
|
exec --no-startup-id picom -c |
||||||
|
exec --no-startup-id xfce4-power-manager |
||||||
|
|
||||||
|
# Use pactl to adjust volume in PulseAudio. |
||||||
|
set $refresh_i3status killall -SIGUSR1 i3status |
||||||
|
bindsym XF86AudioRaiseVolume exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ +10% && $refresh_i3status |
||||||
|
bindsym XF86AudioLowerVolume exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ -10% && $refresh_i3status |
||||||
|
bindsym XF86AudioMute exec --no-startup-id pactl set-sink-mute @DEFAULT_SINK@ toggle && $refresh_i3status |
||||||
|
bindsym XF86AudioMicMute exec --no-startup-id pactl set-source-mute @DEFAULT_SOURCE@ toggle && $refresh_i3status |
||||||
|
|
||||||
|
# Use Mouse+$mod to drag floating windows to their wanted position |
||||||
|
floating_modifier $mod |
||||||
|
|
||||||
|
# kill focused window |
||||||
|
bindsym $mod+Shift+q kill |
||||||
|
|
||||||
|
|
||||||
|
# There also is the (new) i3-dmenu-desktop which only displays applications |
||||||
|
# shipping a .desktop file. It is a wrapper around dmenu, so you need that |
||||||
|
# installed. |
||||||
|
# bindsym $mod+d exec --no-startup-id i3-dmenu-desktop |
||||||
|
|
||||||
|
# change focus |
||||||
|
bindsym $mod+h focus left |
||||||
|
bindsym $mod+j focus down |
||||||
|
bindsym $mod+k focus up |
||||||
|
bindsym $mod+l focus right |
||||||
|
|
||||||
|
# alternatively, you can use the cursor keys: |
||||||
|
bindsym $mod+Left focus left |
||||||
|
bindsym $mod+Down focus down |
||||||
|
bindsym $mod+Up focus up |
||||||
|
bindsym $mod+Right focus right |
||||||
|
|
||||||
|
# move focused window |
||||||
|
bindsym $mod+Shift+h move left |
||||||
|
bindsym $mod+Shift+j move down |
||||||
|
bindsym $mod+Shift+k move up |
||||||
|
bindsym $mod+Shift+l move right |
||||||
|
|
||||||
|
# alternatively, you can use the cursor keys: |
||||||
|
bindsym $mod+Shift+Left move left |
||||||
|
bindsym $mod+Shift+Down move down |
||||||
|
bindsym $mod+Shift+Up move up |
||||||
|
bindsym $mod+Shift+Right move right |
||||||
|
|
||||||
|
|
||||||
|
bindsym $mod+Ctrl+Right resize shrink width 1 px or 1 ppt |
||||||
|
bindsym $mod+Ctrl+Up resize grow height 1 px or 1 ppt |
||||||
|
bindsym $mod+Ctrl+Down resize shrink height 1 px or 1 ppt |
||||||
|
bindsym $mod+Ctrl+Left resize grow width 1 px or 1 ppt |
||||||
|
|
||||||
|
|
||||||
|
# split in horizontal orientation |
||||||
|
bindsym $mod+semicolon split h |
||||||
|
|
||||||
|
# split in vertical orientation |
||||||
|
bindsym $mod+v split v |
||||||
|
|
||||||
|
# enter fullscreen mode for the focused container |
||||||
|
bindsym $mod+f fullscreen toggle |
||||||
|
|
||||||
|
# change container layout (stacked, tabbed, toggle split) |
||||||
|
#bindsym $mod+s layout stacking |
||||||
|
#bindsym $mod+w layout tabbed |
||||||
|
bindsym $mod+s layout toggle split |
||||||
|
|
||||||
|
# toggle tiling / floating |
||||||
|
bindsym $mod+space floating toggle |
||||||
|
|
||||||
|
# change focus between tiling / floating windows |
||||||
|
bindsym $mod+Shift+space focus mode_toggle |
||||||
|
|
||||||
|
# focus the parent container |
||||||
|
bindsym $mod+a focus parent |
||||||
|
|
||||||
|
# focus the child container |
||||||
|
#bindsym $mod+d focus child |
||||||
|
|
||||||
|
new_window pixel 3 |
||||||
|
default_border pixel 4 |
||||||
|
|
||||||
|
gaps inner 14 |
||||||
|
gaps outer 14 |
||||||
|
|
||||||
|
smart_borders on |
||||||
|
|
||||||
|
bindsym $mod+i gaps inner current plus 5 |
||||||
|
bindsym $mod+shift+i gaps inner current minus 5 |
||||||
|
|
||||||
|
bindsym $mod+o gaps outer current plus 5 |
||||||
|
bindsym $mod+shift+o gaps outer current minus 5 |
||||||
|
|
||||||
|
bindsym $mod+BackSpace gaps inner all set 14; gaps outer all set 14 |
||||||
|
bindsym $mod+shift+BackSpace gaps inner all set 0; gaps outer all set 0 |
||||||
|
|
||||||
|
|
||||||
|
#### Programs |
||||||
|
|
||||||
|
bindsym $mod+Return exec alacritty |
||||||
|
bindsym $mod+Shift+Return exec alacritty -e ~/.scripts/web |
||||||
|
|
||||||
|
bindsym $mod+d exec rofi -show run |
||||||
|
bindsym $mod+Shift+d exec rofi -show drun -show-icons true |
||||||
|
|
||||||
|
bindsym $mod+c exec gnome-calendar |
||||||
|
bindsym $mod+Shift+b exec blueman-manager |
||||||
|
bindsym $mod+Shift+t exec lyx & |
||||||
|
bindsym $mod+p exec passmenu -l 30 |
||||||
|
bindsym $mod+Shift+p exec gpodder |
||||||
|
bindsym $mod+Shift+f exec --no-startup-id pcmanfm |
||||||
|
bindsym $mod+Ctrl+f exec --no-startup-id alacritty -e ranger |
||||||
|
|
||||||
|
bindsym Print exec scrot $HOME/Pictures/Screenshots/`date +%Y-%m-%d_%H:%M:%S`.png |
||||||
|
bindsym $mod+Print exec scrot -u $HOME/Pictures/Screenshots/`date +%Y-%m-%d_%H:%M:%S`.png |
||||||
|
bindsym $mod+Ctrl+Print exec scrot -s $HOME/Pictures/Screenshots/`date +%Y-%m-%d_%H:%M:%S`.png |
||||||
|
|
||||||
|
|
||||||
|
#### ROFI |
||||||
|
bindsym $mod+e exec --no-startup-id rofi -show emoji -modi emoji |
||||||
|
|
||||||
|
bindsym $mod+Shift+e exec --no-startup-id rofi -show |
||||||
|
|
||||||
|
#neomutt mail |
||||||
|
bindsym $mod+m exec --no-startup-id alacritty -e neomutt |
||||||
|
|
||||||
|
|
||||||
|
#float certian windows |
||||||
|
|
||||||
|
for_window [class="feh" instance="feh"] floating enable |
||||||
|
for_window [class="org.pwmt.zathura" instance="zathura"] floating enable |
||||||
|
for_window [class="gl" instance="mpv"] floating enable |
||||||
|
|
||||||
|
#wpg |
||||||
|
#bindsym $mod+$alt+t exec wpg -m && wpg --brt $(wpg -c) 10.6 && wpg -s $(wpg -c) && bash /home/simon/.scripts/getwal |
||||||
|
|
||||||
|
#bindsym $mod+$alt+t exec nitrogen --set-zoom-fill --random /home/simon/Pictures/wallpapers/ |
||||||
|
bindsym $mod+$alt+t exec nitrogen --set-zoom-fill /home/simon/Pictures/wallpapers/vidar-nordli-mathisen-Sk32_wG8lcQ-unsplash.jpg |
||||||
|
|
||||||
|
bindsym XF86MonBrightnessDown exec light -U 5 # decrease screen brightness |
||||||
|
bindsym XF86MonBrightnessUp exec light -A 5 # increase screen brightness |
||||||
|
bindsym $mod+w exec --no-startup-id brave www.simonkellet.xyz |
||||||
|
bindsym $mod+Shift+w exec --no-startup-id qutebrowser www.simonkellet.xyz |
||||||
|
bindsym $mod+Ctrl+w exec --no-startup-id alacritty -e amfora simonkellet.xyz |
||||||
|
|
||||||
|
# Define names for default workspaces for which we configure key bindings later on. |
||||||
|
# We use variables to avoid repeating the names in multiple places. |
||||||
|
set $ws1 "1" |
||||||
|
set $ws2 "2" |
||||||
|
set $ws3 "3" |
||||||
|
set $ws4 "4" |
||||||
|
set $ws5 "5" |
||||||
|
set $ws6 "6" |
||||||
|
set $ws7 "7" |
||||||
|
set $ws8 "8" |
||||||
|
set $ws9 "9" |
||||||
|
set $ws10 "10" |
||||||
|
|
||||||
|
# switch to workspace |
||||||
|
bindsym $mod+1 workspace number $ws1 |
||||||
|
bindsym $mod+2 workspace number $ws2 |
||||||
|
bindsym $mod+3 workspace number $ws3 |
||||||
|
bindsym $mod+4 workspace number $ws4 |
||||||
|
bindsym $mod+5 workspace number $ws5 |
||||||
|
bindsym $mod+6 workspace number $ws6 |
||||||
|
bindsym $mod+7 workspace number $ws7 |
||||||
|
bindsym $mod+8 workspace number $ws8 |
||||||
|
bindsym $mod+9 workspace number $ws9 |
||||||
|
bindsym $mod+0 workspace number $ws10 |
||||||
|
|
||||||
|
# move focused container to workspace |
||||||
|
bindsym $mod+Shift+1 move container to workspace number $ws1 |
||||||
|
bindsym $mod+Shift+2 move container to workspace number $ws2 |
||||||
|
bindsym $mod+Shift+3 move container to workspace number $ws3 |
||||||
|
bindsym $mod+Shift+4 move container to workspace number $ws4 |
||||||
|
bindsym $mod+Shift+5 move container to workspace number $ws5 |
||||||
|
bindsym $mod+Shift+6 move container to workspace number $ws6 |
||||||
|
bindsym $mod+Shift+7 move container to workspace number $ws7 |
||||||
|
bindsym $mod+Shift+8 move container to workspace number $ws8 |
||||||
|
bindsym $mod+Shift+9 move container to workspace number $ws9 |
||||||
|
bindsym $mod+Shift+0 move container to workspace number $ws10 |
||||||
|
|
||||||
|
# reload the configuration file |
||||||
|
bindsym $mod+Shift+c reload |
||||||
|
# restart i3 inplace (preserves your layout/session, can be used to upgrade i3) |
||||||
|
bindsym $mod+Shift+r restart |
||||||
|
# exit i3 (logs you out of your X session) |
||||||
|
#bindsym $mod+Shift+e exec "i3-nagbar -t warning -m 'You pressed the exit shortcut. Do you really want to exit i3? This will end your X session.' -B 'Yes, exit i3' 'i3-msg exit'" |
||||||
|
|
||||||
|
# resize window (you can also use the mouse for that) |
||||||
|
mode "resize" { |
||||||
|
# These bindings trigger as soon as you enter the resize mode |
||||||
|
|
||||||
|
# Pressing left will shrink the window’s width. |
||||||
|
# Pressing right will grow the window’s width. |
||||||
|
# Pressing up will shrink the window’s height. |
||||||
|
# Pressing down will grow the window’s height. |
||||||
|
bindsym j resize shrink width 10 px or 10 ppt |
||||||
|
bindsym k resize grow height 10 px or 10 ppt |
||||||
|
bindsym l resize shrink height 10 px or 10 ppt |
||||||
|
bindsym semicolon resize grow width 10 px or 10 ppt |
||||||
|
|
||||||
|
# same bindings, but for the arrow keys |
||||||
|
bindsym Left resize shrink width 10 px or 10 ppt |
||||||
|
bindsym Down resize grow height 10 px or 10 ppt |
||||||
|
bindsym Up resize shrink height 10 px or 10 ppt |
||||||
|
bindsym Right resize grow width 10 px or 10 ppt |
||||||
|
|
||||||
|
# back to normal: Enter or Escape or $mod+r |
||||||
|
bindsym Return mode "default" |
||||||
|
bindsym Escape mode "default" |
||||||
|
bindsym $mod+r mode "default" |
||||||
|
} |
||||||
|
|
||||||
|
bindsym $mod+r mode "resize" |
||||||
|
|
||||||
|
set $Locker i3lock && sleep 1 |
||||||
|
|
||||||
|
set $mode_system (l)lock (e)logout (s)suspend (h)hibernate (r)reboot (Shift+s)shutdown |
||||||
|
|
||||||
|
mode "$mode_system" { |
||||||
|
bindsym l exec --no-startup-id $Locker, mode "default" |
||||||
|
bindsym e exec --no-startup-id i3-msg exit, mode "default" |
||||||
|
bindsym s exec --no-startup-id $Locker && systemctl suspend, mode "default" |
||||||
|
bindsym h exec --no-startup-id $Locker && systemctl hibernate, mode "default" |
||||||
|
bindsym r exec --no-startup-id systemctl reboot, mode "default" |
||||||
|
bindsym Shift+s exec --no-startup-id systemctl poweroff -i, mode "default" |
||||||
|
|
||||||
|
# back to normal: Enter or Escape |
||||||
|
bindsym Return mode "default" |
||||||
|
bindsym Escape mode "default" |
||||||
|
} |
||||||
|
|
||||||
|
bindsym $mod+Escape mode "$mode_system" |
||||||
|
|
||||||
|
# |
||||||
|
#set $coloract "#6a8e7a" |
||||||
|
#set $colorin "#3c5045" |
||||||
|
#set_from_resource $white i3wm.color15 "#fefbec" |
||||||
|
#set_from_resource $split i3wm.color10 "#9E664B0" |
||||||
|
|
||||||
|
# Start i3bar to display a workspace bar (plus the system information i3status |
||||||
|
# finds out, if available) |
||||||
|
bar { |
||||||
|
hidden_state hide |
||||||
|
modifier none |
||||||
|
status_command i3status |
||||||
|
tray_output primary |
||||||
|
i3bar_command i3bar |
||||||
|
position top |
||||||
|
separator_symbol "|" |
||||||
|
|
||||||
|
colors { |
||||||
|
background #000000 |
||||||
|
statusline $white |
||||||
|
separator $white |
||||||
|
|
||||||
|
focused_workspace $colorin $split #FFFFFF |
||||||
|
active_workspace #333333 #222222 #FFFFFF |
||||||
|
inactive_workspace #333333 #222222 #888888 |
||||||
|
urgent_workspace #2F343A #900000 #FFFFFF |
||||||
|
binding_mode #2F343A #900000 #FFFFFF |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
bindsym $mod+b bar mode toggle |
@ -0,0 +1,53 @@ |
|||||||
|
# i3status configuration file. |
||||||
|
# see "man i3status" for documentation. |
||||||
|
|
||||||
|
# It is important that this file is edited as UTF-8. |
||||||
|
# The following line should contain a sharp s: |
||||||
|
# ß |
||||||
|
# If the above line is not correctly displayed, fix your editor first! |
||||||
|
|
||||||
|
general { |
||||||
|
colors = true |
||||||
|
interval = 20 |
||||||
|
} |
||||||
|
|
||||||
|
#order += "ipv6" |
||||||
|
order += "wireless _first_" |
||||||
|
#order += "ethernet _first_" |
||||||
|
order += "battery all" |
||||||
|
order += "disk /" |
||||||
|
#order += "load" |
||||||
|
#order += "memory" |
||||||
|
order += "tztime local" |
||||||
|
|
||||||
|
wireless _first_ { |
||||||
|
format_up = "%essid %ip" |
||||||
|
format_down = "!!!" |
||||||
|
} |
||||||
|
|
||||||
|
ethernet _first_ { |
||||||
|
format_up = "E: %ip (%speed)" |
||||||
|
format_down = "E: down" |
||||||
|
} |
||||||
|
|
||||||
|
battery all { |
||||||
|
format = "%status %percentage %remaining" |
||||||
|
} |
||||||
|
|
||||||
|
disk "/" { |
||||||
|
format = "%used/%avail" |
||||||
|
} |
||||||
|
|
||||||
|
load { |
||||||
|
format = "%1min" |
||||||
|
} |
||||||
|
|
||||||
|
memory { |
||||||
|
format = "%used | %available" |
||||||
|
threshold_degraded = "1G" |
||||||
|
format_degraded = "MEMORY < %available" |
||||||
|
} |
||||||
|
|
||||||
|
tztime local { |
||||||
|
format = "%d/%m/%Y %H:%M" |
||||||
|
} |
@ -0,0 +1,8 @@ |
|||||||
|
#!/bin/bash |
||||||
|
|
||||||
|
#This is a custom menu for rofi that allows me to ssh |
||||||
|
into many different servers, devices etc. |
||||||
|
|
||||||
|
#Simon Kellet, 25/06/21 |
||||||
|
|
||||||
|
|
@ -0,0 +1 @@ |
|||||||
|
Subproject commit bb8a6d8e9a3a938d12025db7f5d43e7b75b5c450 |
@ -0,0 +1,53 @@ |
|||||||
|
# i3status configuration file. |
||||||
|
# see "man i3status" for documentation. |
||||||
|
|
||||||
|
# It is important that this file is edited as UTF-8. |
||||||
|
# The following line should contain a sharp s: |
||||||
|
# ß |
||||||
|
# If the above line is not correctly displayed, fix your editor first! |
||||||
|
|
||||||
|
general { |
||||||
|
colors = true |
||||||
|
interval = 20 |
||||||
|
} |
||||||
|
|
||||||
|
#order += "ipv6" |
||||||
|
order += "wireless _first_" |
||||||
|
#order += "ethernet _first_" |
||||||
|
order += "battery all" |
||||||
|
order += "disk /" |
||||||
|
#order += "load" |
||||||
|
#order += "memory" |
||||||
|
order += "tztime local" |
||||||
|
|
||||||
|
wireless _first_ { |
||||||
|
format_up = "%essid %ip" |
||||||
|
format_down = "!!!" |
||||||
|
} |
||||||
|
|
||||||
|
ethernet _first_ { |
||||||
|
format_up = "E: %ip (%speed)" |
||||||
|
format_down = "E: down" |
||||||
|
} |
||||||
|
|
||||||
|
battery all { |
||||||
|
format = "%status %percentage %remaining" |
||||||
|
} |
||||||
|
|
||||||
|
disk "/" { |
||||||
|
format = "%used/%avail" |
||||||
|
} |
||||||
|
|
||||||
|
load { |
||||||
|
format = "%1min" |
||||||
|
} |
||||||
|
|
||||||
|
memory { |
||||||
|
format = "%used | %available" |
||||||
|
threshold_degraded = "1G" |
||||||
|
format_degraded = "MEMORY < %available" |
||||||
|
} |
||||||
|
|
||||||
|
tztime local { |
||||||
|
format = "%d/%m/%Y %H:%M" |
||||||
|
} |
@ -0,0 +1,107 @@ |
|||||||
|
# Luke's lf settings |
||||||
|
|
||||||
|
# Basic vars |
||||||
|
set shell bash |
||||||
|
set shellopts '-eu' |
||||||
|
set ifs "\n" |
||||||
|
set scrolloff 10 |
||||||
|
set icons |
||||||
|
set period 1 |
||||||
|
set hiddenfiles ".*:*.aux:*.log:*.bbl:*.bcf:*.blg:*.run.xml" |
||||||
|
|
||||||
|
# Vars that depend on environmental variables |
||||||
|
$lf -remote "send $id set previewer ${XDG_CONFIG_HOME:-$HOME/.config}/lf/scope" |
||||||
|
|
||||||
|
# cmds/functions |
||||||
|
cmd open ${{ |
||||||
|
case $(file --mime-type $f -b) in |
||||||
|
image/vnd.djvu|application/pdf|application/octet-stream) setsid -f zathura $fx >/dev/null 2>&1 ;; |
||||||
|
text/*) $EDITOR $fx;; |
||||||
|
image/x-xcf) setsid -f gimp $f >/dev/null 2>&1 ;; |
||||||
|
image/svg+xml) display -- $f ;; |
||||||
|
image/*) rotdir $f | grep -i "\.\(png\|jpg\|jpeg\|gif\|webp\|tif\|ico\)\(_large\)*$" | sxiv -aio 2>/dev/null | lf-select ;; |
||||||
|
audio/*) mpv --audio-display=no $f ;; |
||||||
|
video/*) setsid -f mpv $f -quiet >/dev/null 2>&1 ;; |
||||||
|
application/pdf|application/vnd*|application/epub*) setsid -f zathura $fx >/dev/null 2>&1 ;; |
||||||
|
application/pgp-encrypted) $EDITOR $fx ;; |
||||||
|
*) for f in $fx; do setsid -f $OPENER $f >/dev/null 2>&1; done;; |
||||||
|
esac |
||||||
|
}} |
||||||
|
|
||||||
|
cmd mkdir $mkdir -p "$(echo $* | tr ' ' '\ ')" |
||||||
|
|
||||||
|
cmd extract ${{ |
||||||
|
clear; tput cup $(($(tput lines)/3)); tput bold |
||||||
|
set -f |
||||||
|
printf "%s\n\t" "$fx" |
||||||
|
printf "extract?[y/N]" |
||||||
|
read ans |
||||||
|
[ $ans = "y" ] && ext $fx |
||||||
|
}} |
||||||
|
|
||||||
|
cmd delete ${{ |
||||||
|
clear; tput cup $(($(tput lines)/3)); tput bold |
||||||
|
set -f |
||||||
|
printf "%s\n\t" "$fx" |
||||||
|
printf "delete?[y/N]" |
||||||
|
read ans |
||||||
|
[ $ans = "y" ] && rm -rf -- $fx |
||||||
|
}} |
||||||
|
|
||||||
|
cmd moveto ${{ |
||||||
|
clear; tput cup $(($(tput lines)/3)); tput bold |
||||||
|
set -f |
||||||
|
clear; echo "Move to where?" |
||||||
|
dest="$(cut -d' ' -f2- ${XDG_CONFIG_HOME:-$HOME/.config}/shell/bm-dirs | fzf | sed 's|~|$HOME|' )" && |
||||||
|
for x in $fx; do |
||||||
|
eval mv -iv \"$x\" \"$dest\" |
||||||
|
done && |
||||||
|
notify-send "🚚 File(s) moved." "File(s) moved to $dest." |
||||||
|
}} |
||||||
|
|
||||||
|
cmd copyto ${{ |
||||||
|
clear; tput cup $(($(tput lines)/3)); tput bold |
||||||
|
set -f |
||||||
|
clear; echo "Copy to where?" |
||||||
|
dest="$(cut -d' ' -f2- ${XDG_CONFIG_HOME:-$HOME/.config}/shell/bm-dirs | fzf | sed 's|~|$HOME|' )" && |
||||||
|
for x in $fx; do |
||||||
|
eval cp -ivr \"$x\" \"$dest\" |
||||||
|
done && |
||||||
|
notify-send "📋 File(s) copied." "File(s) copies to $dest." |
||||||
|
}} |
||||||
|
|
||||||
|
cmd setbg "$1" |
||||||
|
cmd bulkrename $vidir |
||||||
|
|
||||||
|
# Bindings |
||||||
|
map <c-f> $lf -remote "send $id select '$(fzf)'" |
||||||
|
map J $lf -remote "send $id cd $(cut -d' ' -f2 ${XDG_CONFIG_HOME:-$HOME/.config}/shell/bm-dirs | fzf)" |
||||||
|
map gh |
||||||
|
map g top |
||||||
|
map D delete |
||||||
|
map E extract |
||||||
|
map C copyto |
||||||
|
map M moveto |
||||||
|
map <c-n> push :mkdir<space> |
||||||
|
map <c-r> reload |
||||||
|
map <c-s> set hidden! |
||||||
|
map <enter> shell |
||||||
|
map x $$f |
||||||
|
map X !$f |
||||||
|
map o &mimeopen $f |
||||||
|
map O $mimeopen --ask $f |
||||||
|
|
||||||
|
map A rename # at the very end |
||||||
|
map c push A<c-u> # new rename |
||||||
|
map I push A<c-a> # at the very beginning |
||||||
|
map i push A<a-b><a-b><a-f> # before extention |
||||||
|
map a push A<a-b> # after extention |
||||||
|
map B bulkrename |
||||||
|
map b $setbg $f |
||||||
|
|
||||||
|
map <c-e> down |
||||||
|
map <c-y> up |
||||||
|
map V push :!nvim<space> |
||||||
|
|
||||||
|
# Source Bookmarks |
||||||
|
source "~/.config/lf/shortcutrc" |
@ -0,0 +1,58 @@ |
|||||||
|
#!/bin/bash |
||||||
|
|
||||||
|
set -C -f -u |
||||||
|
#IFS=$'\n' |
||||||
|
IFS="$(printf '%b_' '\n')"; IFS="${IFS%_}" |
||||||
|
|
||||||
|
# ANSI color codes are supported. |
||||||
|
# STDIN is disabled, so interactive scripts won't work properly |
||||||
|
|
||||||
|
# This script is considered a configuration file and must be updated manually. |
||||||
|
|
||||||
|
# Meanings of exit codes: |
||||||
|
# code | meaning | action of ranger |
||||||
|
# -----+------------+------------------------------------------- |
||||||
|
# 0 | success | Display stdout as preview |
||||||
|
# 1 | no preview | Display no preview at all |
||||||
|
# 2 | plain text | Display the plain content of the file |
||||||
|
|
||||||
|
# Script arguments |
||||||
|
FILE_PATH="${1}" # Full path of the highlighted file |
||||||
|
HEIGHT="${2}" |
||||||
|
|
||||||
|
#FILE_EXTENSION="${FILE_PATH##*.}" |
||||||
|
#FILE_EXTENSION_LOWER=$(echo ${FILE_EXTENSION} | tr '[:upper:]' '[:lower:]') |
||||||
|
|
||||||
|
# Settings |
||||||
|
HIGHLIGHT_SIZE_MAX=262143 # 256KiB |
||||||
|
HIGHLIGHT_TABWIDTH=8 |
||||||
|
HIGHLIGHT_STYLE='pablo' |
||||||
|
|
||||||
|
|
||||||
|
handle_mime() { |
||||||
|
local mimetype="${1}" |
||||||
|
case "${mimetype}" in |
||||||
|
text/html) w3m -dump "${FILE_PATH}" ;; |
||||||
|
text/troff) man ./ "${FILE_PATH}" | col -b ;; |
||||||
|
text/* | */xml) |
||||||
|
if [ "$( stat --printf='%s' -- "${FILE_PATH}" )" -gt "${HIGHLIGHT_SIZE_MAX}" ]; then |
||||||
|
exit 2 |
||||||
|
fi |
||||||
|
if [ "$( tput colors )" -ge 256 ]; then |
||||||
|
local highlight_format='xterm256' |
||||||
|
else |
||||||
|
local highlight_format='ansi' |
||||||
|
fi |
||||||
|
highlight --replace-tabs="${HIGHLIGHT_TABWIDTH}" --out-format="${highlight_format}" \ |
||||||
|
--style="${HIGHLIGHT_STYLE}" --force -- "${FILE_PATH}" ;; |
||||||
|
application/zip) atool --list -- "${FILE_PATH}" ;; |
||||||
|
image/*) chafa --fill=block --symbols=block -c 256 -s 80x"${HEIGHT}" "${FILE_PATH}" || exit 1;; |
||||||
|
video/* | audio/*|application/octet-stream) mediainfo "${FILE_PATH}" || exit 1;; |
||||||
|
*/pdf) pdftotext -l 10 -nopgbrk -q -- "${FILE_PATH}" - ;; |
||||||
|
*opendocument*) odt2txt "${FILE_PATH}" ;; |
||||||
|
esac |
||||||
|
} |
||||||
|
|
||||||
|
MIMETYPE="$( file --dereference --brief --mime-type -- "${FILE_PATH}" )" |
||||||
|
handle_mime "${MIMETYPE}" |
||||||
|
exit 1 |
@ -0,0 +1,21 @@ |
|||||||
|
# If a config.py file exists, this file is ignored unless it's explicitly loaded |
||||||
|
# via config.load_autoconfig(). For more information, see: |
||||||
|
# https://github.com/qutebrowser/qutebrowser/blob/master/doc/help/configuring.asciidoc#loading-autoconfigyml |
||||||
|
# DO NOT edit this file by hand, qutebrowser will overwrite it. |
||||||
|
# Instead, create a config.py - see :help for details. |
||||||
|
|
||||||
|
config_version: 2 |
||||||
|
settings: |
||||||
|
content.notifications.enabled: |
||||||
|
https://www.netflix.com: false |
||||||
|
https://www.youtube.com: false |
||||||
|
scrolling.bar: |
||||||
|
global: never |
||||||
|
scrolling.smooth: |
||||||
|
global: true |
||||||
|
tabs.position: |
||||||
|
global: left |
||||||
|
tabs.show: |
||||||
|
global: always |
||||||
|
tabs.width: |
||||||
|
global: 2% |
@ -0,0 +1,10 @@ |
|||||||
|
https://portal.stir.ac.uk/security/login.jsp?requrl=/my-portal.jsp&&user=&userid= University of Stirling Portal Login |
||||||
|
https://www.gchq-careers.co.uk/cyberfirst/ CyberFirst Bursaries and Apprenticeships 2020-21 |
||||||
|
https://myaccount.google.com/?utm_source=sign_in_no_continue Google Account |
||||||
|
https://drive.google.com/drive/my-drive My Drive - Google Drive |
||||||
|
https://cloud.digitalocean.com/projects/f6cd0d83-aac5-4ea4-853b-d7a552be85d5/resources?i=c8e679 fearrising404@gmail.com project - DigitalOcean |
||||||
|
https://www.shhhhhhboo.xyz/ # Welcome to Simon's Gemini page! (Est 09/05/2021) # About Me # Contact |
||||||
|
https://www.discogs.com/messages/ Inbox (5) |
||||||
|
http://192.168.1.254/00000111500/gui/#/main/ Home |
||||||
|
http://192.168.1.125/admin/index.php Pi-hole - raspberrypi |
||||||
|
http://www.patorjk.com/software/taag/#p=testall&f=Calvin%20S&t=%3C3%20Linux Text to ASCII Art Generator (TAAG) |
@ -0,0 +1,240 @@ |
|||||||
|
import dracula.draw |
||||||
|
# Autogenerated config.py |
||||||
|
# |
||||||
|
# NOTE: config.py is intended for advanced users who are comfortable |
||||||
|
# with manually migrating the config file on qutebrowser upgrades. If |
||||||
|
# you prefer, you can also configure qutebrowser using the |
||||||
|
# :set/:bind/:config-* commands without having to write a config.py |
||||||
|
# file. |
||||||
|
# |
||||||
|
# Documentation: |
||||||
|
# qute://help/configuring.html |
||||||
|
# qute://help/settings.html |
||||||
|
|
||||||
|
# Change the argument to True to still load settings configured via autoconfig.yml |
||||||
|
config.load_autoconfig(True) |
||||||
|
|
||||||
|
##dracula |
||||||
|
dracula.draw.blood(c, { |
||||||
|
'spacing': { |
||||||
|
'vertical': 6, |
||||||
|
'horizontal': 8 |
||||||
|
} |
||||||
|
}) |
||||||
|
|
||||||
|
# Which cookies to accept. With QtWebEngine, this setting also controls |
||||||
|
# other features with tracking capabilities similar to those of cookies; |
||||||
|
# including IndexedDB, DOM storage, filesystem API, service workers, and |
||||||
|
# AppCache. Note that with QtWebKit, only `all` and `never` are |
||||||
|
# supported as per-domain values. Setting `no-3rdparty` or `no- |
||||||
|
# unknown-3rdparty` per-domain on QtWebKit will have the same effect as |
||||||
|
# `all`. If this setting is used with URL patterns, the pattern gets |
||||||
|
# applied to the origin/first party URL of the page making the request, |
||||||
|
# not the request URL. With QtWebEngine 5.15.0+, paths will be stripped |
||||||
|
# from URLs, so URL patterns using paths will not match. With |
||||||
|
# QtWebEngine 5.15.2+, subdomains are additionally stripped as well, so |
||||||
|
# you will typically need to set this setting for `example.com` when the |
||||||
|
# cookie is set on `somesubdomain.example.com` for it to work properly. |
||||||
|
# To debug issues with this setting, start qutebrowser with `--debug |
||||||
|
# --logfilter network --debug-flag log-cookies` which will show all |
||||||
|
# cookies being set. |
||||||
|
# Type: String |
||||||
|
# Valid values: |
||||||
|
# - all: Accept all cookies. |
||||||
|
# - no-3rdparty: Accept cookies from the same origin only. This is known to break some sites, such as GMail. |
||||||
|
# - no-unknown-3rdparty: Accept cookies from the same origin only, unless a cookie is already set for the domain. On QtWebEngine, this is the same as no-3rdparty. |
||||||
|
# - never: Don't accept cookies at all. |
||||||
|
config.set('content.cookies.accept', 'all', 'chrome-devtools://*') |
||||||
|
|
||||||
|
# Which cookies to accept. With QtWebEngine, this setting also controls |
||||||
|
# other features with tracking capabilities similar to those of cookies; |
||||||
|
# including IndexedDB, DOM storage, filesystem API, service workers, and |
||||||
|
# AppCache. Note that with QtWebKit, only `all` and `never` are |
||||||
|
# supported as per-domain values. Setting `no-3rdparty` or `no- |
||||||
|
# unknown-3rdparty` per-domain on QtWebKit will have the same effect as |
||||||
|
# `all`. If this setting is used with URL patterns, the pattern gets |
||||||
|
# applied to the origin/first party URL of the page making the request, |
||||||
|
# not the request URL. With QtWebEngine 5.15.0+, paths will be stripped |
||||||
|
# from URLs, so URL patterns using paths will not match. With |
||||||
|
# QtWebEngine 5.15.2+, subdomains are additionally stripped as well, so |
||||||
|
# you will typically need to set this setting for `example.com` when the |
||||||
|
# cookie is set on `somesubdomain.example.com` for it to work properly. |
||||||
|
# To debug issues with this setting, start qutebrowser with `--debug |
||||||
|
# --logfilter network --debug-flag log-cookies` which will show all |
||||||
|
# cookies being set. |
||||||
|
# Type: String |
||||||
|
# Valid values: |
||||||
|
# - all: Accept all cookies. |
||||||
|
# - no-3rdparty: Accept cookies from the same origin only. This is known to break some sites, such as GMail. |
||||||
|
# - no-unknown-3rdparty: Accept cookies from the same origin only, unless a cookie is already set for the domain. On QtWebEngine, this is the same as no-3rdparty. |
||||||
|
# - never: Don't accept cookies at all. |
||||||
|
config.set('content.cookies.accept', 'all', 'devtools://*') |
||||||
|
|
||||||
|
# Value to send in the `Accept-Language` header. Note that the value |
||||||
|
# read from JavaScript is always the global value. |
||||||
|
# Type: String |
||||||
|
config.set('content.headers.accept_language', '', 'https://matchmaker.krunker.io/*') |
||||||
|
|
||||||
|
# User agent to send. The following placeholders are defined: * |
||||||
|
# `{os_info}`: Something like "X11; Linux x86_64". * `{webkit_version}`: |
||||||
|
# The underlying WebKit version (set to a fixed value with |
||||||
|
# QtWebEngine). * `{qt_key}`: "Qt" for QtWebKit, "QtWebEngine" for |
||||||
|
# QtWebEngine. * `{qt_version}`: The underlying Qt version. * |
||||||
|
# `{upstream_browser_key}`: "Version" for QtWebKit, "Chrome" for |
||||||
|
# QtWebEngine. * `{upstream_browser_version}`: The corresponding |
||||||
|
# Safari/Chrome version. * `{qutebrowser_version}`: The currently |
||||||
|
# running qutebrowser version. The default value is equal to the |
||||||
|
# unchanged user agent of QtWebKit/QtWebEngine. Note that the value |
||||||
|
# read from JavaScript is always the global value. With QtWebEngine |
||||||
|
# between 5.12 and 5.14 (inclusive), changing the value exposed to |
||||||
|
# JavaScript requires a restart. |
||||||
|
# Type: FormatString |
||||||
|
config.set('content.headers.user_agent', 'Mozilla/5.0 ({os_info}) AppleWebKit/{webkit_version} (KHTML, like Gecko) {upstream_browser_key}/{upstream_browser_version} Safari/{webkit_version}', 'https://web.whatsapp.com/') |
||||||
|
|
||||||
|
# User agent to send. The following placeholders are defined: * |
||||||
|
# `{os_info}`: Something like "X11; Linux x86_64". * `{webkit_version}`: |
||||||
|
# The underlying WebKit version (set to a fixed value with |
||||||
|
# QtWebEngine). * `{qt_key}`: "Qt" for QtWebKit, "QtWebEngine" for |
||||||
|
# QtWebEngine. * `{qt_version}`: The underlying Qt version. * |
||||||
|
# `{upstream_browser_key}`: "Version" for QtWebKit, "Chrome" for |
||||||
|
# QtWebEngine. * `{upstream_browser_version}`: The corresponding |
||||||
|
# Safari/Chrome version. * `{qutebrowser_version}`: The currently |
||||||
|
# running qutebrowser version. The default value is equal to the |
||||||
|
# unchanged user agent of QtWebKit/QtWebEngine. Note that the value |
||||||
|
# read from JavaScript is always the global value. With QtWebEngine |
||||||
|
# between 5.12 and 5.14 (inclusive), changing the value exposed to |
||||||
|
# JavaScript requires a restart. |
||||||
|
# Type: FormatString |
||||||
|
config.set('content.headers.user_agent', 'Mozilla/5.0 ({os_info}) AppleWebKit/{webkit_version} (KHTML, like Gecko) {upstream_browser_key}/{upstream_browser_version} Safari/{webkit_version} Edg/{upstream_browser_version}', 'https://accounts.google.com/*') |
||||||
|
|
||||||
|
# User agent to send. The following placeholders are defined: * |
||||||
|
# `{os_info}`: Something like "X11; Linux x86_64". * `{webkit_version}`: |
||||||
|
# The underlying WebKit version (set to a fixed value with |
||||||
|
# QtWebEngine). * `{qt_key}`: "Qt" for QtWebKit, "QtWebEngine" for |
||||||
|
# QtWebEngine. * `{qt_version}`: The underlying Qt version. * |
||||||
|
# `{upstream_browser_key}`: "Version" for QtWebKit, "Chrome" for |
||||||
|
# QtWebEngine. * `{upstream_browser_version}`: The corresponding |
||||||
|
# Safari/Chrome version. * `{qutebrowser_version}`: The currently |
||||||
|
# running qutebrowser version. The default value is equal to the |
||||||
|
# unchanged user agent of QtWebKit/QtWebEngine. Note that the value |
||||||
|
# read from JavaScript is always the global value. With QtWebEngine |
||||||
|
# between 5.12 and 5.14 (inclusive), changing the value exposed to |
||||||
|
# JavaScript requires a restart. |
||||||
|
# Type: FormatString |
||||||
|
config.set('content.headers.user_agent', 'Mozilla/5.0 ({os_info}) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99 Safari/537.36', 'https://*.slack.com/*') |
||||||
|
|
||||||
|
# Load images automatically in web pages. |
||||||
|
# Type: Bool |
||||||
|
config.set('content.images', True, 'chrome-devtools://*') |
||||||
|
|
||||||
|
# Load images automatically in web pages. |
||||||
|
# Type: Bool |
||||||
|
config.set('content.images', True, 'devtools://*') |
||||||
|
|
||||||
|
# Enable JavaScript. |
||||||
|
# Type: Bool |
||||||
|
config.set('content.javascript.enabled', True, 'chrome-devtools://*') |
||||||
|
|
||||||
|
# Enable JavaScript. |
||||||
|
# Type: Bool |
||||||
|
config.set('content.javascript.enabled', True, 'devtools://*') |
||||||
|
|
||||||
|
# Enable JavaScript. |
||||||
|
# Type: Bool |
||||||
|
config.set('content.javascript.enabled', True, 'chrome://*/*') |
||||||
|
|
||||||
|
# Enable JavaScript. |
||||||
|
# Type: Bool |
||||||
|
config.set('content.javascript.enabled', True, 'qute://*/*') |
||||||
|
|
||||||
|
# Allow websites to show notifications. |
||||||
|
# Type: BoolAsk |
||||||
|
# Valid values: |
||||||
|
# - true |
||||||
|
# - false |
||||||
|
# - ask |
||||||
|
config.set('content.notifications.enabled', False, 'https://www.reddit.com') |
||||||
|
|
||||||
|
|
||||||
|
#config.set('colors.webpage.darkmode.enabled', True) |
||||||
|
#config.set('colors.webpage.prefers_color_scheme_dark', True) |
||||||
|
# variables |
||||||
|
black = "#000000" |
||||||
|
darkgrey = "#030303" |
||||||
|
magenta = "#ff009e" |
||||||
|
midgrey = "#544d4d" |
||||||
|
pink = "#ff00f3" |
||||||
|
red = "#ff0000" |
||||||
|
white = "#ffffff" |
||||||
|
yellow = "#ffdb00" |
||||||
|
|
||||||
|
c.colors.webpage.preferred_color_scheme = 'dark' |
||||||
|
c.content.blocking.adblock.lists = ['https://raw.githubusercontent.com/uBlockOrigin/uAssets/master/filters/filters-2020.txt', 'https://easylist.to/easylist/easylist.txt', 'https://easylist.to/easylist/easyprivacy.txt', 'https://easylist.to/easylist/easylist.txt', 'https://easylist.to/easylist/easyprivacy.txt', 'https://easylist-downloads.adblockplus.org/easylistdutch.txt', 'https://easylist-downloads.adblockplus.org/abp-filters-anti-cv.txt', 'https://www.i-dont-care-about-cookies.eu/abp/', 'https://secure.fanboy.co.nz/fanboy-cookiemonster.txt'] |
||||||
|
c.content.blocking.method = 'both' |
||||||
|
#c.content.user_stylesheets = '~/.config/qutebrowser/lol.css' |
||||||
|
config.bind('<Ctrl-m>', 'spawn mpv --volume=50 {url}') |
||||||
|
config.bind('<Ctrl-p>', 'spawn --userscript qute-pass') |
||||||
|
#c.colors.completion.category.bg = black |
||||||
|
#c.colors.completion.category.bg = darkgrey |
||||||
|
#c.colors.completion.category.border.bottom = pink |
||||||
|
#c.colors.completion.category.border.top = darkgrey |
||||||
|
#c.colors.completion.category.border.top = darkgrey |
||||||
|
#c.colors.completion.category.fg = white |
||||||
|
#c.colors.completion.category.fg = white |
||||||
|
#c.colors.completion.even.bg = midgrey |
||||||
|
#c.colors.completion.fg = white |
||||||
|
#c.colors.completion.item.selected.bg = pink |
||||||
|
#c.colors.completion.item.selected.border.bottom = c.colors.completion.category.border.top |
||||||
|
#c.colors.completion.item.selected.border.top = c.colors.completion.item.selected.bg |
||||||
|
#c.colors.completion.item.selected.fg = white |
||||||
|
#c.colors.completion.match.fg = pink |
||||||
|
#c.colors.completion.odd.bg = darkgrey |
||||||
|
#c.colors.contextmenu.disabled.bg = darkgrey |
||||||
|
#c.colors.contextmenu.disabled.fg = midgrey |
||||||
|
#c.colors.contextmenu.menu.bg = darkgrey |
||||||
|
#c.colors.contextmenu.menu.fg = white |
||||||
|
#c.colors.contextmenu.selected.bg = pink |
||||||
|
#c.colors.contextmenu.selected.fg = white |
||||||
|
#c.colors.downloads.bar.bg = black |
||||||
|
#c.colors.hints.bg = black |
||||||
|
#c.colors.hints.fg = pink |
||||||
|
#c.colors.hints.match.fg = white |
||||||
|
#c.colors.statusbar.insert.bg = pink |
||||||
|
#c.colors.tabs.bar.bg = black |
||||||
|
#c.colors.tabs.even.bg = midgrey |
||||||
|
#c.colors.tabs.even.fg = c.colors.tabs.odd.fg |
||||||
|
#c.colors.tabs.odd.bg = black |
||||||
|
#c.colors.tabs.odd.fg = white |
||||||
|
#c.colors.tabs.pinned.even.bg = black |
||||||
|
#c.colors.tabs.pinned.even.fg = pink |
||||||
|
#c.colors.tabs.pinned.odd.bg = midgrey |
||||||
|
#c.colors.tabs.pinned.odd.fg = pink |
||||||
|
#c.colors.tabs.pinned.selected.even.bg = pink |
||||||
|
#c.colors.tabs.pinned.selected.odd.bg = pink |
||||||
|
#c.colors.tabs.selected.even.bg = pink |
||||||
|
#c.colors.tabs.selected.odd.bg = pink |
||||||
|
#c.hints.border = black |
||||||
|
|
||||||
|
|
||||||
|
#c.colors.webpage.darkmode.enabled = False |
||||||
|
#c.colors.webpage.darkmode.algorithm = 'lightness-cielab' |
||||||
|
#c.colors.webpage.darkmode.grayscale.all = True |
||||||
|
#c.colors.webpage.darkmode.grayscale.images = 0.5 |
||||||
|
#c.colors.webpage.darkmode.policy.images = 'never' |
||||||
|
#c.colors.webpage.darkmode.policy.page = 'smart' |
||||||
|
|
||||||
|
c.url.searchengines["g"] = "https://www.google.co.uk/search?q={}" |
||||||
|
c.url.searchengines["ddg"] = "https://www.duckduckgo.com/?q={}" |
||||||
|
c.url.searchengines["b"] = "https://search.brave.com/search?q={}" |
||||||
|
c.url.searchengines["aw"] = "https://wiki.archlinux.org/?search={}" |
||||||
|
c.url.searchengines["yt"] = "http://www.youtube.com/results?search_query={}" |
||||||
|
c.url.searchengines["w"] = "https://en.wikipedia.org/w/index.php?search={}&title=Special:Search" |
||||||
|
c.url.searchengines["ebay"] = "https://www.ebay.co.uk/sch/{}" |
||||||
|
c.url.searchengines["r"] = "https://www.reddit.com/r/{}" |
||||||
|
c.url.searchengines["ws"] = "https://www.whosampled.com/search/?q={}" |
||||||
|
c.url.searchengines["gt"] = "https://github.com/search/?q={}" |
||||||
|
c.url.searchengines["dic"] = "http://www.dictionary.com/browse/{}" |
||||||
|
c.url.searchengines["ety"] = "http://www.etymonline.com/index.php?allowed_in_frame=0&search={}" |
||||||
|
c.url.searchengines["aur"] = "https://aur.archlinux.org/packages/?O=0&K={}" |
||||||
|
c.url.searchengines["proton"] = "https://www.protondb.com/search?q={}" |
||||||
|
c.url.searchengines["disc"] = "https://www.discogs.com/search/?q={}" |
@ -0,0 +1 @@ |
|||||||
|
Subproject commit ba5bd6589c4bb8ab35aaaaf7111906732f9764ef |
@ -0,0 +1,278 @@ |
|||||||
|
#!/usr/bin/env python3 |
||||||
|
|
||||||
|
# Copyright 2017 Chris Braun (cryzed) <cryzed@googlemail.com> |
||||||
|
# |
||||||
|
# This file is part of qutebrowser. |
||||||
|
# |
||||||
|
# qutebrowser is free software: you can redistribute it and/or modify |
||||||
|
# it under the terms of the GNU General Public License as published by |
||||||
|
# the Free Software Foundation, either version 3 of the License, or |
||||||
|
# (at your option) any later version. |
||||||
|
# |
||||||
|
# qutebrowser is distributed in the hope that it will be useful, |
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||||
|
# GNU General Public License for more details. |
||||||
|
# |
||||||
|
# You should have received a copy of the GNU General Public License |
||||||
|
# along with qutebrowser. If not, see <https://www.gnu.org/licenses/>. |
||||||
|
|
||||||
|
""" |
||||||
|
Insert login information using pass and a dmenu-compatible application (e.g. dmenu, rofi -dmenu, ...). A short |
||||||
|
demonstration can be seen here: https://i.imgur.com/KN3XuZP.gif. |
||||||
|
""" |
||||||
|
|
||||||
|
USAGE = """The domain of the site has to appear as a segment in the pass path, |
||||||
|
for example: "github.com/cryzed" or "websites/github.com". How the username and |
||||||
|
password are determined is freely configurable using the CLI arguments. As an |
||||||
|
example, if you instead store the username as part of the secret (and use a |
||||||
|
site's name as filename), instead of the default configuration, use |
||||||
|
`--username-target secret` and `--username-pattern "username: (.+)"`. |
||||||
|
|
||||||
|
The login information is inserted by emulating key events using qutebrowser's |
||||||
|
fake-key command in this manner: [USERNAME]<Tab>[PASSWORD], which is compatible |
||||||
|
with almost all login forms. |
||||||
|
|
||||||
|
If you use gopass with multiple mounts, use the CLI switch --mode gopass to switch to gopass mode. |
||||||
|
|
||||||
|
Suggested bindings similar to Uzbl's `formfiller` script: |
||||||
|
|
||||||
|
config.bind('<z><l>', 'spawn --userscript qute-pass') |
||||||
|
config.bind('<z><u><l>', 'spawn --userscript qute-pass --username-only') |
||||||
|
config.bind('<z><p><l>', 'spawn --userscript qute-pass --password-only') |
||||||
|
config.bind('<z><o><l>', 'spawn --userscript qute-pass --otp-only') |
||||||
|
""" |
||||||
|
|
||||||
|
EPILOG = """Dependencies: tldextract (Python 3 module), pass, pass-otp (optional). |
||||||
|
For issues and feedback please use: https://github.com/cryzed/qutebrowser-userscripts. |
||||||
|
|
||||||
|
WARNING: The login details are viewable as plaintext in qutebrowser's debug log (qute://log) and might be shared if |
||||||
|
you decide to submit a crash report!""" |
||||||
|
|
||||||
|
import argparse |
||||||
|
import enum |
||||||
|
import fnmatch |
||||||
|
import functools |
||||||
|
import os |
||||||
|
import re |
||||||
|
import shlex |
||||||
|
import subprocess |
||||||
|
import sys |
||||||
|
|
||||||
|
import tldextract |
||||||
|
|
||||||
|
|
||||||
|
def expanded_path(path): |
||||||
|
# Expand potential ~ in paths, since this script won't be called from a shell that does it for us |
||||||
|
expanded = os.path.expanduser(path) |
||||||
|
# Add trailing slash if not present |
||||||
|
return os.path.join(expanded, '') |
||||||
|
|
||||||
|
|
||||||
|
argument_parser = argparse.ArgumentParser(description=__doc__, usage=USAGE, epilog=EPILOG) |
||||||
|
argument_parser.add_argument('url', nargs='?', default=os.getenv('QUTE_URL')) |
||||||
|
argument_parser.add_argument('--password-store', '-p', |
||||||
|
default=expanded_path(os.getenv('PASSWORD_STORE_DIR', default='~/.password-store')), |
||||||
|
help='Path to your pass password-store (only used in pass-mode)', type=expanded_path) |
||||||
|
argument_parser.add_argument('--mode', '-M', choices=['pass', 'gopass'], default="pass", |
||||||
|
help='Select mode [gopass] to use gopass instead of the standard pass.') |
||||||
|
argument_parser.add_argument('--username-pattern', '-u', default=r'.*/(.+)', |
||||||
|
help='Regular expression that matches the username') |
||||||
|
argument_parser.add_argument('--username-target', '-U', choices=['path', 'secret'], default='path', |
||||||
|
help='The target for the username regular expression') |
||||||
|
argument_parser.add_argument('--password-pattern', '-P', default=r'(.*)', |
||||||
|
help='Regular expression that matches the password') |
||||||
|
argument_parser.add_argument('--dmenu-invocation', '-d', default='rofi -dmenu', |
||||||
|
help='Invocation used to execute a dmenu-provider') |
||||||
|
argument_parser.add_argument('--noinsert-mode', '-n', dest='insert_mode', action='store_false', |
||||||
|
help="Don't automatically enter insert mode") |
||||||
|
argument_parser.add_argument('--io-encoding', '-i', default='UTF-8', |
||||||
|
help='Encoding used to communicate with subprocesses') |
||||||
|
argument_parser.add_argument('--merge-candidates', '-m', action='store_true', |
||||||
|
help='Merge pass candidates for fully-qualified and registered domain name') |
||||||
|
argument_parser.add_argument('--extra-url-suffixes', '-s', default='', |
||||||
|
help='Comma-separated string containing extra suffixes (e.g local)') |
||||||
|
group = argument_parser.add_mutually_exclusive_group() |
||||||
|
group.add_argument('--username-only', '-e', action='store_true', help='Only insert username') |
||||||
|
group.add_argument('--password-only', '-w', action='store_true', help='Only insert password') |
||||||
|
group.add_argument('--otp-only', '-o', action='store_true', help='Only insert OTP code') |
||||||
|
|
||||||
|
stderr = functools.partial(print, file=sys.stderr) |
||||||
|
|
||||||
|
|
||||||
|
class ExitCodes(enum.IntEnum): |
||||||
|
SUCCESS = 0 |
||||||
|
FAILURE = 1 |
||||||
|
# 1 is automatically used if Python throws an exception |
||||||
|
NO_PASS_CANDIDATES = 2 |
||||||
|
COULD_NOT_MATCH_USERNAME = 3 |
||||||
|
COULD_NOT_MATCH_PASSWORD = 4 |
||||||
|
|
||||||
|
|
||||||
|
class CouldNotMatchUsername(Exception): |
||||||
|
pass |
||||||
|
|
||||||
|
|
||||||
|
class CouldNotMatchPassword(Exception): |
||||||
|
pass |
||||||
|
|
||||||
|
|
||||||
|
def qute_command(command): |
||||||
|
with open(os.environ['QUTE_FIFO'], 'w') as fifo: |
||||||
|
fifo.write(command + '\n') |
||||||
|
fifo.flush() |
||||||
|
|
||||||
|
|
||||||
|
def find_pass_candidates(domain): |
||||||
|
candidates = [] |
||||||
|
|
||||||
|
if arguments.mode == "gopass": |
||||||
|
all_passwords = subprocess.run(["gopass", "list", "--flat" ], stdout=subprocess.PIPE).stdout.decode("UTF-8").splitlines() |
||||||
|
|
||||||
|
for password in all_passwords: |
||||||
|
if domain in password: |
||||||
|
candidates.append(password) |
||||||
|
else: |
||||||
|
for path, directories, file_names in os.walk(arguments.password_store, followlinks=True): |
||||||
|
secrets = fnmatch.filter(file_names, '*.gpg') |
||||||
|
if not secrets: |
||||||
|
continue |
||||||
|
|
||||||
|
# Strip password store path prefix to get the relative pass path |
||||||
|
pass_path = path[len(arguments.password_store):] |
||||||
|
split_path = pass_path.split(os.path.sep) |
||||||
|
for secret in secrets: |
||||||
|
secret_base = os.path.splitext(secret)[0] |
||||||
|
if domain not in (split_path + [secret_base]): |
||||||
|
continue |
||||||
|
|
||||||
|
candidates.append(os.path.join(pass_path, secret_base)) |
||||||
|
return candidates |
||||||
|
|
||||||
|
|
||||||
|
def _run_pass(pass_arguments): |
||||||
|
# The executable is conveniently named after it's mode [pass|gopass]. |
||||||
|
pass_command = [arguments.mode] |
||||||
|
env = os.environ.copy() |
||||||
|
env['PASSWORD_STORE_DIR'] = arguments.password_store |
||||||
|
process = subprocess.run(pass_command + pass_arguments, env=env, stdout=subprocess.PIPE) |
||||||
|
return process.stdout.decode(arguments.io_encoding).strip() |
||||||
|
|
||||||
|
|
||||||
|
def pass_(path): |
||||||
|
return _run_pass(['show', path]) |
||||||
|
|
||||||
|
|
||||||
|
def pass_otp(path): |
||||||
|
if arguments.mode == "gopass": |
||||||
|
return _run_pass(['otp', '-o', path]) |
||||||
|
return _run_pass(['otp', path]) |
||||||
|
|
||||||
|
|
||||||
|
def dmenu(items, invocation): |
||||||
|
command = shlex.split(invocation) |
||||||
|
process = subprocess.run(command, input='\n'.join(items).encode(arguments.io_encoding), stdout=subprocess.PIPE) |
||||||
|
return process.stdout.decode(arguments.io_encoding).strip() |
||||||
|
|
||||||
|
|
||||||
|
def fake_key_raw(text): |
||||||
|
for character in text: |
||||||
|
# Escape all characters by default, space requires special handling |
||||||
|
sequence = '" "' if character == ' ' else '\{}'.format(character) |
||||||
|
qute_command('fake-key {}'.format(sequence)) |
||||||
|
|
||||||
|
|
||||||
|
def extract_password(secret, pattern): |
||||||
|
match = re.match(pattern, secret) |
||||||
|
if not match: |
||||||
|
raise CouldNotMatchPassword("Pattern did not match target") |
||||||
|
try: |
||||||
|
return match.group(1) |
||||||
|
except IndexError: |
||||||
|
raise CouldNotMatchPassword("Pattern did not contain capture group, please use capture group. Example: (.*)") |
||||||
|
|
||||||
|
|
||||||
|
def extract_username(target, pattern): |
||||||
|
match = re.search(pattern, target, re.MULTILINE) |
||||||
|
if not match: |
||||||
|
raise CouldNotMatchUsername("Pattern did not match target") |
||||||
|
try: |
||||||
|
return match.group(1) |
||||||
|
except IndexError: |
||||||
|
raise CouldNotMatchUsername("Pattern did not contain capture group, please use capture group. Example: (.*)") |
||||||
|
|
||||||
|
|
||||||
|
def main(arguments): |
||||||
|
if not arguments.url: |
||||||
|
argument_parser.print_help() |
||||||
|
return ExitCodes.FAILURE |
||||||
|
|
||||||
|
extractor = tldextract.TLDExtract(extra_suffixes=arguments.extra_url_suffixes.split(',')) |
||||||
|
extract_result = extractor(arguments.url) |
||||||
|
|
||||||
|
# Try to find candidates using targets in the following order: fully-qualified domain name (includes subdomains), |
||||||
|
# the registered domain name, the IPv4 address if that's what the URL represents and finally the private domain |
||||||
|
# (if a non-public suffix was used). |
||||||
|
candidates = set() |
||||||
|
attempted_targets = [] |
||||||
|
|
||||||
|
private_domain = '' |
||||||
|
if not extract_result.suffix: |
||||||
|
private_domain = ('.'.join((extract_result.subdomain, extract_result.domain)) |
||||||
|
if extract_result.subdomain else extract_result.domain) |
||||||
|
|
||||||
|
for target in filter(None, [extract_result.fqdn, extract_result.registered_domain, extract_result.ipv4, private_domain]): |
||||||
|
attempted_targets.append(target) |
||||||
|
target_candidates = find_pass_candidates(target) |
||||||
|
if not target_candidates: |
||||||
|
continue |
||||||
|
|
||||||
|
candidates.update(target_candidates) |
||||||
|
if not arguments.merge_candidates: |
||||||
|
break |
||||||
|
else: |
||||||
|
if not candidates: |
||||||
|
stderr('No pass candidates for URL {!r} found! (I tried {!r})'.format(arguments.url, attempted_targets)) |
||||||
|
return ExitCodes.NO_PASS_CANDIDATES |
||||||
|
|
||||||
|
selection = candidates.pop() if len(candidates) == 1 else dmenu(sorted(candidates), arguments.dmenu_invocation) |
||||||
|
# Nothing was selected, simply return |
||||||
|
if not selection: |
||||||
|
return ExitCodes.SUCCESS |
||||||
|
|
||||||
|
# If username-target is path and user asked for username-only, we don't need to run pass. |
||||||
|
# Or if using otp-only, it will run pass on its own. |
||||||
|
secret = None |
||||||
|
if not (arguments.username_target == 'path' and arguments.username_only) and not arguments.otp_only: |
||||||
|
secret = pass_(selection) |
||||||
|
username_target = selection if arguments.username_target == 'path' else secret |
||||||
|
try: |
||||||
|
if arguments.username_only: |
||||||
|
fake_key_raw(extract_username(username_target, arguments.username_pattern)) |
||||||
|
elif arguments.password_only: |
||||||
|
fake_key_raw(extract_password(secret, arguments.password_pattern)) |
||||||
|
elif arguments.otp_only: |
||||||
|
otp = pass_otp(selection) |
||||||
|
fake_key_raw(otp) |
||||||
|
else: |
||||||
|
# Enter username and password using fake-key and <Tab> (which seems to work almost universally), then switch |
||||||
|
# back into insert-mode, so the form can be directly submitted by hitting enter afterwards |
||||||
|
fake_key_raw(extract_username(username_target, arguments.username_pattern)) |
||||||
|
qute_command('fake-key <Tab>') |
||||||
|
fake_key_raw(extract_password(secret, arguments.password_pattern)) |
||||||
|
except CouldNotMatchPassword as e: |
||||||
|
stderr('Failed to match password, target: secret, error: {}'.format(e)) |
||||||
|
return ExitCodes.COULD_NOT_MATCH_PASSWORD |
||||||
|
except CouldNotMatchUsername as e: |
||||||
|
stderr('Failed to match username, target: {}, error: {}'.format(arguments.username_target, e)) |
||||||
|
return ExitCodes.COULD_NOT_MATCH_USERNAME |
||||||
|
|
||||||
|
if arguments.insert_mode: |
||||||
|
qute_command('mode-enter insert') |
||||||
|
|
||||||
|
return ExitCodes.SUCCESS |
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__': |
||||||
|
arguments = argument_parser.parse_args() |
||||||
|
sys.exit(main(arguments)) |
@ -0,0 +1,278 @@ |
|||||||
|
#!/usr/bin/env python3 |
||||||
|
|
||||||
|
# Copyright 2017 Chris Braun (cryzed) <cryzed@googlemail.com> |
||||||
|
# |
||||||
|
# This file is part of qutebrowser. |
||||||
|
# |
||||||
|
# qutebrowser is free software: you can redistribute it and/or modify |
||||||
|
# it under the terms of the GNU General Public License as published by |
||||||
|
# the Free Software Foundation, either version 3 of the License, or |
||||||
|
# (at your option) any later version. |
||||||
|
# |
||||||
|
# qutebrowser is distributed in the hope that it will be useful, |
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||||
|
# GNU General Public License for more details. |
||||||
|
# |
||||||
|
# You should have received a copy of the GNU General Public License |
||||||
|
# along with qutebrowser. If not, see <https://www.gnu.org/licenses/>. |
||||||
|
|
||||||
|
""" |
||||||
|
Insert login information using pass and a dmenu-compatible application (e.g. dmenu, rofi -dmenu, ...). A short |
||||||
|
demonstration can be seen here: https://i.imgur.com/KN3XuZP.gif. |
||||||
|
""" |
||||||
|
|
||||||
|
USAGE = """The domain of the site has to appear as a segment in the pass path, |
||||||
|
for example: "github.com/cryzed" or "websites/github.com". How the username and |
||||||
|
password are determined is freely configurable using the CLI arguments. As an |
||||||
|
example, if you instead store the username as part of the secret (and use a |
||||||
|
site's name as filename), instead of the default configuration, use |
||||||
|
`--username-target secret` and `--username-pattern "username: (.+)"`. |
||||||
|
|
||||||
|
The login information is inserted by emulating key events using qutebrowser's |
||||||
|
fake-key command in this manner: [USERNAME]<Tab>[PASSWORD], which is compatible |
||||||
|
with almost all login forms. |
||||||
|
|
||||||
|
If you use gopass with multiple mounts, use the CLI switch --mode gopass to switch to gopass mode. |
||||||
|
|
||||||
|
Suggested bindings similar to Uzbl's `formfiller` script: |
||||||
|
|
||||||
|
config.bind('<z><l>', 'spawn --userscript qute-pass') |
||||||
|
config.bind('<z><u><l>', 'spawn --userscript qute-pass --username-only') |
||||||
|
config.bind('<z><p><l>', 'spawn --userscript qute-pass --password-only') |
||||||
|
config.bind('<z><o><l>', 'spawn --userscript qute-pass --otp-only') |
||||||
|
""" |
||||||
|
|
||||||
|
EPILOG = """Dependencies: tldextract (Python 3 module), pass, pass-otp (optional). |
||||||
|
For issues and feedback please use: https://github.com/cryzed/qutebrowser-userscripts. |
||||||
|
|
||||||
|
WARNING: The login details are viewable as plaintext in qutebrowser's debug log (qute://log) and might be shared if |
||||||
|
you decide to submit a crash report!""" |
||||||
|
|
||||||
|
import argparse |
||||||
|
import enum |
||||||
|
import fnmatch |
||||||
|
import functools |
||||||
|
import os |
||||||
|
import re |
||||||
|
import shlex |
||||||
|
import subprocess |
||||||
|
import sys |
||||||
|
|
||||||
|
import tldextract |
||||||
|
|
||||||
|
|
||||||
|
def expanded_path(path): |
||||||
|
# Expand potential ~ in paths, since this script won't be called from a shell that does it for us |
||||||
|
expanded = os.path.expanduser(path) |
||||||
|
# Add trailing slash if not present |
||||||
|
return os.path.join(expanded, '') |
||||||
|
|
||||||
|
|
||||||
|
argument_parser = argparse.ArgumentParser(description=__doc__, usage=USAGE, epilog=EPILOG) |
||||||
|
argument_parser.add_argument('url', nargs='?', default=os.getenv('QUTE_URL')) |
||||||
|
argument_parser.add_argument('--password-store', '-p', |
||||||
|
default=expanded_path(os.getenv('PASSWORD_STORE_DIR', default='~/.password-store')), |
||||||
|
help='Path to your pass password-store (only used in pass-mode)', type=expanded_path) |
||||||
|
argument_parser.add_argument('--mode', '-M', choices=['pass', 'gopass'], default="pass", |
||||||
|
help='Select mode [gopass] to use gopass instead of the standard pass.') |
||||||
|
argument_parser.add_argument('--username-pattern', '-u', default=r'.*/(.+)', |
||||||
|
help='Regular expression that matches the username') |
||||||
|
argument_parser.add_argument('--username-target', '-U', choices=['path', 'secret'], default='path', |
||||||
|
help='The target for the username regular expression') |
||||||
|
argument_parser.add_argument('--password-pattern', '-P', default=r'(.*)', |
||||||
|
help='Regular expression that matches the password') |
||||||
|
argument_parser.add_argument('--dmenu-invocation', '-d', default='rofi -dmenu', |
||||||
|
help='Invocation used to execute a dmenu-provider') |
||||||
|
argument_parser.add_argument('--noinsert-mode', '-n', dest='insert_mode', action='store_false', |
||||||
|
help="Don't automatically enter insert mode") |
||||||
|
argument_parser.add_argument('--io-encoding', '-i', default='UTF-8', |
||||||
|
help='Encoding used to communicate with subprocesses') |
||||||
|
argument_parser.add_argument('--merge-candidates', '-m', action='store_true', |
||||||
|
help='Merge pass candidates for fully-qualified and registered domain name') |
||||||
|
argument_parser.add_argument('--extra-url-suffixes', '-s', default='', |
||||||
|
help='Comma-separated string containing extra suffixes (e.g local)') |
||||||
|
group = argument_parser.add_mutually_exclusive_group() |
||||||
|
group.add_argument('--username-only', '-e', action='store_true', help='Only insert username') |
||||||
|
group.add_argument('--password-only', '-w', action='store_true', help='Only insert password') |
||||||
|
group.add_argument('--otp-only', '-o', action='store_true', help='Only insert OTP code') |
||||||
|
|
||||||
|
stderr = functools.partial(print, file=sys.stderr) |
||||||
|
|
||||||
|
|
||||||
|
class ExitCodes(enum.IntEnum): |
||||||
|
SUCCESS = 0 |
||||||
|
FAILURE = 1 |
||||||
|
# 1 is automatically used if Python throws an exception |
||||||
|
NO_PASS_CANDIDATES = 2 |
||||||
|
COULD_NOT_MATCH_USERNAME = 3 |
||||||
|
COULD_NOT_MATCH_PASSWORD = 4 |
||||||
|
|
||||||
|
|
||||||
|
class CouldNotMatchUsername(Exception): |
||||||
|
pass |
||||||
|
|
||||||
|
|
||||||
|
class CouldNotMatchPassword(Exception): |
||||||
|
pass |
||||||
|
|
||||||
|
|
||||||
|
def qute_command(command): |
||||||
|
with open(os.environ['QUTE_FIFO'], 'w') as fifo: |
||||||
|
fifo.write(command + '\n') |
||||||
|
fifo.flush() |
||||||
|
|
||||||
|
|
||||||
|
def find_pass_candidates(domain): |
||||||
|
candidates = [] |
||||||
|
|
||||||
|
if arguments.mode == "gopass": |
||||||
|
all_passwords = subprocess.run(["gopass", "list", "--flat" ], stdout=subprocess.PIPE).stdout.decode("UTF-8").splitlines() |
||||||
|
|
||||||
|
for password in all_passwords: |
||||||
|
if domain in password: |
||||||
|
candidates.append(password) |
||||||
|
else: |
||||||
|
for path, directories, file_names in os.walk(arguments.password_store, followlinks=True): |
||||||
|
secrets = fnmatch.filter(file_names, '*.gpg') |
||||||
|
if not secrets: |
||||||
|
continue |
||||||
|
|
||||||
|
# Strip password store path prefix to get the relative pass path |
||||||
|
pass_path = path[len(arguments.password_store):] |
||||||
|
split_path = pass_path.split(os.path.sep) |
||||||
|
for secret in secrets: |
||||||
|
secret_base = os.path.splitext(secret)[0] |
||||||
|
if domain not in (split_path + [secret_base]): |
||||||
|
continue |
||||||
|
|
||||||
|
candidates.append(os.path.join(pass_path, secret_base)) |
||||||
|
return candidates |
||||||
|
|
||||||
|
|
||||||
|
def _run_pass(pass_arguments): |
||||||
|
# The executable is conveniently named after it's mode [pass|gopass]. |
||||||
|
pass_command = [arguments.mode] |
||||||
|
env = os.environ.copy() |
||||||
|
env['PASSWORD_STORE_DIR'] = arguments.password_store |
||||||
|
process = subprocess.run(pass_command + pass_arguments, env=env, stdout=subprocess.PIPE) |
||||||
|
return process.stdout.decode(arguments.io_encoding).strip() |
||||||
|
|
||||||
|
|
||||||
|
def pass_(path): |
||||||
|
return _run_pass(['show', path]) |
||||||
|
|
||||||
|
|
||||||
|
def pass_otp(path): |
||||||
|
if arguments.mode == "gopass": |
||||||
|
return _run_pass(['otp', '-o', path]) |
||||||
|
return _run_pass(['otp', path]) |
||||||
|
|
||||||
|
|
||||||
|
def dmenu(items, invocation): |
||||||
|
command = shlex.split(invocation) |
||||||
|
process = subprocess.run(command, input='\n'.join(items).encode(arguments.io_encoding), stdout=subprocess.PIPE) |
||||||
|
return process.stdout.decode(arguments.io_encoding).strip() |
||||||
|
|
||||||
|
|
||||||
|
def fake_key_raw(text): |
||||||
|
for character in text: |
||||||
|
# Escape all characters by default, space requires special handling |
||||||
|
sequence = '" "' if character == ' ' else '\{}'.format(character) |
||||||
|
qute_command('fake-key {}'.format(sequence)) |
||||||
|
|
||||||
|
|
||||||
|
def extract_password(secret, pattern): |
||||||
|
match = re.match(pattern, secret) |
||||||
|
if not match: |
||||||
|
raise CouldNotMatchPassword("Pattern did not match target") |
||||||
|
try: |
||||||
|
return match.group(1) |
||||||
|
except IndexError: |
||||||
|
raise CouldNotMatchPassword("Pattern did not contain capture group, please use capture group. Example: (.*)") |
||||||
|
|
||||||
|
|
||||||
|
def extract_username(target, pattern): |
||||||
|
match = re.search(pattern, target, re.MULTILINE) |
||||||
|
if not match: |
||||||
|
raise CouldNotMatchUsername("Pattern did not match target") |
||||||
|
try: |
||||||
|
return match.group(1) |
||||||
|
except IndexError: |
||||||
|
raise CouldNotMatchUsername("Pattern did not contain capture group, please use capture group. Example: (.*)") |
||||||
|
|
||||||
|
|
||||||
|
def main(arguments): |
||||||
|
if not arguments.url: |
||||||
|
argument_parser.print_help() |
||||||
|
return ExitCodes.FAILURE |
||||||
|
|
||||||
|
extractor = tldextract.TLDExtract(extra_suffixes=arguments.extra_url_suffixes.split(',')) |
||||||
|
extract_result = extractor(arguments.url) |
||||||
|
|
||||||
|
# Try to find candidates using targets in the following order: fully-qualified domain name (includes subdomains), |
||||||
|
# the registered domain name, the IPv4 address if that's what the URL represents and finally the private domain |
||||||
|
# (if a non-public suffix was used). |
||||||
|
candidates = set() |
||||||
|
attempted_targets = [] |
||||||
|
|
||||||
|
private_domain = '' |
||||||
|
if not extract_result.suffix: |
||||||
|
private_domain = ('.'.join((extract_result.subdomain, extract_result.domain)) |
||||||
|
if extract_result.subdomain else extract_result.domain) |
||||||
|
|
||||||
|
for target in filter(None, [extract_result.fqdn, extract_result.registered_domain, extract_result.ipv4, private_domain]): |
||||||
|
attempted_targets.append(target) |
||||||
|
target_candidates = find_pass_candidates(target) |
||||||
|
if not target_candidates: |
||||||
|
continue |
||||||
|
|
||||||
|
candidates.update(target_candidates) |
||||||
|
if not arguments.merge_candidates: |
||||||
|
break |
||||||
|
else: |
||||||
|
if not candidates: |
||||||
|
stderr('No pass candidates for URL {!r} found! (I tried {!r})'.format(arguments.url, attempted_targets)) |
||||||
|
return ExitCodes.NO_PASS_CANDIDATES |
||||||
|
|
||||||
|
selection = candidates.pop() if len(candidates) == 1 else dmenu(sorted(candidates), arguments.dmenu_invocation) |
||||||
|
# Nothing was selected, simply return |
||||||
|
if not selection: |
||||||
|
return ExitCodes.SUCCESS |
||||||
|
|
||||||
|
# If username-target is path and user asked for username-only, we don't need to run pass. |
||||||
|
# Or if using otp-only, it will run pass on its own. |
||||||
|
secret = None |
||||||
|
if not (arguments.username_target == 'path' and arguments.username_only) and not arguments.otp_only: |
||||||
|
secret = pass_(selection) |
||||||
|
username_target = selection if arguments.username_target == 'path' else secret |
||||||
|
try: |
||||||
|
if arguments.username_only: |
||||||
|
fake_key_raw(extract_username(username_target, arguments.username_pattern)) |
||||||
|
elif arguments.password_only: |
||||||
|
fake_key_raw(extract_password(secret, arguments.password_pattern)) |
||||||
|
elif arguments.otp_only: |
||||||
|
otp = pass_otp(selection) |
||||||
|
fake_key_raw(otp) |
||||||
|
else: |
||||||
|
# Enter username and password using fake-key and <Tab> (which seems to work almost universally), then switch |
||||||
|
# back into insert-mode, so the form can be directly submitted by hitting enter afterwards |
||||||
|
fake_key_raw(extract_username(username_target, arguments.username_pattern)) |
||||||
|
qute_command('fake-key <Tab>') |
||||||
|
fake_key_raw(extract_password(secret, arguments.password_pattern)) |
||||||
|
except CouldNotMatchPassword as e: |
||||||
|
stderr('Failed to match password, target: secret, error: {}'.format(e)) |
||||||
|
return ExitCodes.COULD_NOT_MATCH_PASSWORD |
||||||
|
except CouldNotMatchUsername as e: |
||||||
|
stderr('Failed to match username, target: {}, error: {}'.format(arguments.username_target, e)) |
||||||
|
return ExitCodes.COULD_NOT_MATCH_USERNAME |
||||||
|
|
||||||
|
if arguments.insert_mode: |
||||||
|
qute_command('mode-enter insert') |
||||||
|
|
||||||
|
return ExitCodes.SUCCESS |
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__': |
||||||
|
arguments = argument_parser.parse_args() |
||||||
|
sys.exit(main(arguments)) |
@ -0,0 +1,62 @@ |
|||||||
|
# This is a sample commands.py. You can add your own commands here. |
||||||
|
# |
||||||
|
# Please refer to commands_full.py for all the default commands and a complete |
||||||
|
# documentation. Do NOT add them all here, or you may end up with defunct |
||||||
|
# commands when upgrading ranger. |
||||||
|
|
||||||
|
# A simple command for demonstration purposes follows. |
||||||
|
# ----------------------------------------------------------------------------- |
||||||
|
|
||||||
|
from __future__ import (absolute_import, division, print_function) |
||||||
|
|
||||||
|
# You can import any python module as needed. |
||||||
|
import os |
||||||
|
|
||||||
|
# You always need to import ranger.api.commands here to get the Command class: |
||||||
|
from ranger.api.commands import Command |
||||||
|
|
||||||
|
|
||||||
|
# Any class that is a subclass of "Command" will be integrated into ranger as a |
||||||
|
# command. Try typing ":my_edit<ENTER>" in ranger! |
||||||
|
class my_edit(Command): |
||||||
|
# The so-called doc-string of the class will be visible in the built-in |
||||||
|
# help that is accessible by typing "?c" inside ranger. |
||||||
|
""":my_edit <filename> |
||||||
|
|
||||||
|
A sample command for demonstration purposes that opens a file in an editor. |
||||||
|
""" |
||||||
|
|
||||||
|
# The execute method is called when you run this command in ranger. |
||||||
|
def execute(self): |
||||||
|
# self.arg(1) is the first (space-separated) argument to the function. |
||||||
|
# This way you can write ":my_edit somefilename<ENTER>". |
||||||
|
if self.arg(1): |
||||||
|
# self.rest(1) contains self.arg(1) and everything that follows |
||||||
|
target_filename = self.rest(1) |
||||||
|
else: |
||||||
|
# self.fm is a ranger.core.filemanager.FileManager object and gives |
||||||
|
# you access to internals of ranger. |
||||||
|
# self.fm.thisfile is a ranger.container.file.File object and is a |
||||||
|
# reference to the currently selected file. |
||||||
|
target_filename = self.fm.thisfile.path |
||||||
|
|
||||||
|
# This is a generic function to print text in ranger. |
||||||
|
self.fm.notify("Let's edit the file " + target_filename + "!") |
||||||
|
|
||||||
|
# Using bad=True in fm.notify allows you to print error messages: |
||||||
|
if not os.path.exists(target_filename): |
||||||
|
self.fm.notify("The given file does not exist!", bad=True) |
||||||
|
return |
||||||
|
|
||||||
|
# This executes a function from ranger.core.acitons, a module with a |
||||||
|
# variety of subroutines that can help you construct commands. |
||||||
|
# Check out the source, or run "pydoc ranger.core.actions" for a list. |
||||||
|
self.fm.edit_file(target_filename) |
||||||
|
|
||||||
|
# The tab method is called when you press tab, and should return a list of |
||||||
|
# suggestions that the user will tab through. |
||||||
|
# tabnum is 1 for <TAB> and -1 for <S-TAB> by default |
||||||
|
def tab(self, tabnum): |
||||||
|
# This is a generic tab-completion function that iterates through the |
||||||
|
# content of the current directory. |
||||||
|
return self._tab_directory_content() |
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,759 @@ |
|||||||
|
# =================================================================== |
||||||
|
# This file contains the default startup commands for ranger. |
||||||
|
# To change them, it is recommended to create either /etc/ranger/rc.conf |
||||||
|
# (system-wide) or ~/.config/ranger/rc.conf (per user) and add your custom |
||||||
|
# commands there. |
||||||
|
# |
||||||
|
# If you copy this whole file there, you may want to set the environment |
||||||
|
# variable RANGER_LOAD_DEFAULT_RC to FALSE to avoid loading it twice. |
||||||
|
# |
||||||
|
# The purpose of this file is mainly to define keybindings and settings. |
||||||
|
# For running more complex python code, please create a plugin in "plugins/" or |
||||||
|
# a command in "commands.py". |
||||||
|
# |
||||||
|
# Each line is a command that will be run before the user interface |
||||||
|
# is initialized. As a result, you can not use commands which rely |
||||||
|
# on the UI such as :delete or :mark. |
||||||
|
# =================================================================== |
||||||
|
|
||||||
|
# =================================================================== |
||||||
|
# == Options |
||||||
|
# =================================================================== |
||||||
|
|
||||||
|
# Which viewmode should be used? Possible values are: |
||||||
|
# miller: Use miller columns which show multiple levels of the hierarchy |
||||||
|
# multipane: Midnight-commander like multipane view showing all tabs next |
||||||
|
# to each other |
||||||
|
set viewmode miller |
||||||
|
|
||||||
|
# How many columns are there, and what are their relative widths? |
||||||
|
set column_ratios 1,3,4 |
||||||
|
|
||||||
|
# Which files should be hidden? (regular expression) |
||||||
|
set hidden_filter ^\.|\.(?:pyc|pyo|bak|swp)$|^lost\+found$|^__(py)?cache__$ |
||||||
|
|
||||||
|
# Show hidden files? You can toggle this by typing 'zh' |
||||||
|
set show_hidden false |
||||||
|
|
||||||
|
# Ask for a confirmation when running the "delete" command? |
||||||
|
# Valid values are "always", "never", "multiple" (default) |
||||||
|
# With "multiple", ranger will ask only if you delete multiple files at once. |
||||||
|
set confirm_on_delete multiple |
||||||
|
|
||||||
|
# Use non-default path for file preview script? |
||||||
|
# ranger ships with scope.sh, a script that calls external programs (see |
||||||
|
# README.md for dependencies) to preview images, archives, etc. |
||||||
|
#set preview_script ~/.config/ranger/scope.sh |
||||||
|
|
||||||
|
# Use the external preview script or display simple plain text or image previews? |
||||||
|
set use_preview_script true |
||||||
|
|
||||||
|
# Automatically count files in the directory, even before entering them? |
||||||
|
set automatically_count_files true |
||||||
|
|
||||||
|
# Open all images in this directory when running certain image viewers |
||||||
|
# like feh or sxiv? You can still open selected files by marking them. |
||||||
|
set open_all_images true |
||||||
|
|
||||||
|
# Be aware of version control systems and display information. |
||||||
|
set vcs_aware false |
||||||
|
|
||||||
|
# State of the four backends git, hg, bzr, svn. The possible states are |
||||||
|
# disabled, local (only show local info), enabled (show local and remote |
||||||
|
# information). |
||||||
|
set vcs_backend_git enabled |
||||||
|
set vcs_backend_hg disabled |
||||||
|
set vcs_backend_bzr disabled |
||||||
|
set vcs_backend_svn disabled |
||||||
|
|
||||||
|
# Truncate the long commit messages to this length when shown in the statusbar. |
||||||
|
set vcs_msg_length 50 |
||||||
|
|
||||||
|
# Use one of the supported image preview protocols |
||||||
|
set preview_images true |
||||||
|
|
||||||
|
# Set the preview image method. Supported methods: |
||||||
|
# |
||||||
|
# * w3m (default): |
||||||
|
# Preview images in full color with the external command "w3mimgpreview"? |
||||||
|
# This requires the console web browser "w3m" and a supported terminal. |
||||||
|
# It has been successfully tested with "xterm" and "urxvt" without tmux. |
||||||
|
# |
||||||
|
# * iterm2: |
||||||
|
# Preview images in full color using iTerm2 image previews |
||||||
|
# (http://iterm2.com/images.html). This requires using iTerm2 compiled |
||||||
|
# with image preview support. |
||||||
|
# |
||||||
|
# This feature relies on the dimensions of the terminal's font. By default, a |
||||||
|
# width of 8 and height of 11 are used. To use other values, set the options |
||||||
|
# iterm2_font_width and iterm2_font_height to the desired values. |
||||||
|
# |
||||||
|
# * terminology: |
||||||
|
# Previews images in full color in the terminology terminal emulator. |
||||||
|
# Supports a wide variety of formats, even vector graphics like svg. |
||||||
|
# |
||||||
|
# * urxvt: |
||||||
|
# Preview images in full color using urxvt image backgrounds. This |
||||||
|
# requires using urxvt compiled with pixbuf support. |
||||||
|
# |
||||||
|
# * urxvt-full: |
||||||
|
# The same as urxvt but utilizing not only the preview pane but the |
||||||
|
# whole terminal window. |
||||||
|
# |
||||||
|
# * kitty: |
||||||
|
# Preview images in full color using kitty image protocol. |
||||||
|
# Requires python PIL or pillow library. |
||||||
|
# If ranger does not share the local filesystem with kitty |
||||||
|
# the transfer method is changed to encode the whole image; |
||||||
|
# while slower, this allows remote previews, |
||||||
|
# for example during an ssh session. |
||||||
|
# Tmux is unsupported. |
||||||
|
# |
||||||
|
# * ueberzug: |
||||||
|
# Preview images in full color with the external command "ueberzug". |
||||||
|
# Images are shown by using a child window. |
||||||
|
# Only for users who run X11 in GNU/Linux. |
||||||
|
set preview_images_method ueberzug |
||||||
|
|
||||||
|
# Delay in seconds before displaying an image with the w3m method. |
||||||
|
# Increase it in case of experiencing display corruption. |
||||||
|
set w3m_delay 0.02 |
||||||
|
|
||||||
|
# Manually adjust the w3mimg offset when using a terminal which needs this |
||||||
|
set w3m_offset 0 |
||||||
|
|
||||||
|
# Default iTerm2 font size (see: preview_images_method: iterm2) |
||||||
|
set iterm2_font_width 8 |
||||||
|
set iterm2_font_height 11 |
||||||
|
|
||||||
|
# Use a unicode "..." character to mark cut-off filenames? |
||||||
|
set unicode_ellipsis false |
||||||
|
|
||||||
|
# BIDI support - try to properly display file names in RTL languages (Hebrew, Arabic). |
||||||
|
# Requires the python-bidi pip package |
||||||
|
set bidi_support false |
||||||
|
|
||||||
|
# Show dotfiles in the bookmark preview box? |
||||||
|
set show_hidden_bookmarks true |
||||||
|
|
||||||
|
# Which colorscheme to use? These colorschemes are available by default: |
||||||
|
# default, jungle, snow, solarized |
||||||
|
set colorscheme default |
||||||
|
|
||||||
|
# Preview files on the rightmost column? |
||||||
|
# And collapse (shrink) the last column if there is nothing to preview? |
||||||
|
set preview_files true |
||||||
|
set preview_directories true |
||||||
|
set collapse_preview true |
||||||
|
|
||||||
|
# Wrap long lines in plain text previews? |
||||||
|
set wrap_plaintext_previews false |
||||||
|
|
||||||
|
# Save the console history on exit? |
||||||
|
set save_console_history true |
||||||
|
|
||||||
|
# Draw the status bar on top of the browser window (default: bottom) |
||||||
|
set status_bar_on_top false |
||||||
|
|
||||||
|
# Draw a progress bar in the status bar which displays the average state of all |
||||||
|
# currently running tasks which support progress bars? |
||||||
|
set draw_progress_bar_in_status_bar true |
||||||
|
|
||||||
|
# Draw borders around columns? (separators, outline, both, or none) |
||||||
|
# Separators are vertical lines between columns. |
||||||
|
# Outline draws a box around all the columns. |
||||||
|
# Both combines the two. |
||||||
|
set draw_borders none |
||||||
|
|
||||||
|
# Display the directory name in tabs? |
||||||
|
set dirname_in_tabs false |
||||||
|
|
||||||
|
# Enable the mouse support? |
||||||
|
set mouse_enabled true |
||||||
|
|
||||||
|
# Display the file size in the main column or status bar? |
||||||
|
set display_size_in_main_column true |
||||||
|
set display_size_in_status_bar true |
||||||
|
|
||||||
|
# Display the free disk space in the status bar? |
||||||
|
set display_free_space_in_status_bar true |
||||||
|
|
||||||
|
# Display files tags in all columns or only in main column? |
||||||
|
set display_tags_in_all_columns true |
||||||
|
|
||||||
|
# Set a title for the window? Updates both `WM_NAME` and `WM_ICON_NAME` |
||||||
|
set update_title false |
||||||
|
|
||||||
|
# Set the tmux/screen window-name to "ranger"? |
||||||
|
set update_tmux_title true |
||||||
|
|
||||||
|
# Shorten the title if it gets long? The number defines how many |
||||||
|
# directories are displayed at once, 0 turns off this feature. |
||||||
|
set shorten_title 3 |
||||||
|
|
||||||
|
# Show hostname in titlebar? |
||||||
|
set hostname_in_titlebar true |
||||||
|
|
||||||
|
# Abbreviate $HOME with ~ in the titlebar (first line) of ranger? |
||||||
|
set tilde_in_titlebar false |
||||||
|
|
||||||
|
# How many directory-changes or console-commands should be kept in history? |
||||||
|
set max_history_size 20 |
||||||
|
set max_console_history_size 50 |
||||||
|
|
||||||
|
# Try to keep so much space between the top/bottom border when scrolling: |
||||||
|
set scroll_offset 8 |
||||||
|
|
||||||
|
# Flush the input after each key hit? (Noticeable when ranger lags) |
||||||
|
set flushinput true |
||||||
|
|
||||||
|
# Padding on the right when there's no preview? |
||||||
|
# This allows you to click into the space to run the file. |
||||||
|
set padding_right true |
||||||
|
|
||||||
|
# Save bookmarks (used with mX and `X) instantly? |
||||||
|
# This helps to synchronize bookmarks between multiple ranger |
||||||
|
# instances but leads to *slight* performance loss. |
||||||
|
# When false, bookmarks are saved when ranger is exited. |
||||||
|
set autosave_bookmarks true |
||||||
|
|
||||||
|
# Save the "`" bookmark to disk. This can be used to switch to the last |
||||||
|
# directory by typing "``". |
||||||
|
set save_backtick_bookmark true |
||||||
|
|
||||||
|
# You can display the "real" cumulative size of directories by using the |
||||||
|
# command :get_cumulative_size or typing "dc". The size is expensive to |
||||||
|
# calculate and will not be updated automatically. You can choose |
||||||
|
# to update it automatically though by turning on this option: |
||||||
|
set autoupdate_cumulative_size false |
||||||
|
|
||||||
|
# Turning this on makes sense for screen readers: |
||||||
|
set show_cursor false |
||||||
|
|
||||||
|
# One of: size, natural, basename, atime, ctime, mtime, type, random |
||||||
|
set sort natural |
||||||
|
|
||||||
|
# Additional sorting options |
||||||
|
set sort_reverse false |
||||||
|
set sort_case_insensitive true |
||||||
|
set sort_directories_first true |
||||||
|
set sort_unicode false |
||||||
|
|
||||||
|
# Enable this if key combinations with the Alt Key don't work for you. |
||||||
|
# (Especially on xterm) |
||||||
|
set xterm_alt_key false |
||||||
|
|
||||||
|
# Whether to include bookmarks in cd command |
||||||
|
set cd_bookmarks true |
||||||
|
|
||||||
|
# Changes case sensitivity for the cd command tab completion |
||||||
|
set cd_tab_case sensitive |
||||||
|
|
||||||
|
# Use fuzzy tab completion with the "cd" command. For example, |
||||||
|
# ":cd /u/lo/b<tab>" expands to ":cd /usr/local/bin". |
||||||
|
set cd_tab_fuzzy false |
||||||
|
|
||||||
|
# Avoid previewing files larger than this size, in bytes. Use a value of 0 to |
||||||
|
# disable this feature. |
||||||
|
set preview_max_size 0 |
||||||
|
|
||||||
|
# The key hint lists up to this size have their sublists expanded. |
||||||
|
# Otherwise the submaps are replaced with "...". |
||||||
|
set hint_collapse_threshold 10 |
||||||
|
|
||||||
|
# Add the highlighted file to the path in the titlebar |
||||||
|
set show_selection_in_titlebar true |
||||||
|
|
||||||
|
# The delay that ranger idly waits for user input, in milliseconds, with a |
||||||
|
# resolution of 100ms. Lower delay reduces lag between directory updates but |
||||||
|
# increases CPU load. |
||||||
|
set idle_delay 2000 |
||||||
|
|
||||||
|
# When the metadata manager module looks for metadata, should it only look for |
||||||
|
# a ".metadata.json" file in the current directory, or do a deep search and |
||||||
|
# check all directories above the current one as well? |
||||||
|
set metadata_deep_search false |
||||||
|
|
||||||
|
# Clear all existing filters when leaving a directory |
||||||
|
set clear_filters_on_dir_change false |
||||||
|
|
||||||
|
# Disable displaying line numbers in main column. |
||||||
|
# Possible values: false, absolute, relative. |
||||||
|
set line_numbers false |
||||||
|
|
||||||
|
# When line_numbers=relative show the absolute line number in the |
||||||
|
# current line. |
||||||
|
set relative_current_zero false |
||||||
|
|
||||||
|
# Start line numbers from 1 instead of 0 |
||||||
|
set one_indexed false |
||||||
|
|
||||||
|
# Save tabs on exit |
||||||
|
set save_tabs_on_exit false |
||||||
|
|
||||||
|
# Enable scroll wrapping - moving down while on the last item will wrap around to |
||||||
|
# the top and vice versa. |
||||||
|
set wrap_scroll false |
||||||
|
|
||||||
|
# Set the global_inode_type_filter to nothing. Possible options: d, f and l for |
||||||
|
# directories, files and symlinks respectively. |
||||||
|
set global_inode_type_filter |
||||||
|
|
||||||
|
# This setting allows to freeze the list of files to save I/O bandwidth. It |
||||||
|
# should be 'false' during start-up, but you can toggle it by pressing F. |
||||||
|
set freeze_files false |
||||||
|
|
||||||
|
# Print file sizes in bytes instead of the default human-readable format. |
||||||
|
set size_in_bytes false |
||||||
|
|
||||||
|
# Warn at startup if RANGER_LEVEL env var is greater than 0, in other words |
||||||
|
# give a warning when you nest ranger in a subshell started by ranger. |
||||||
|
# Special value "error" makes the warning more visible. |
||||||
|
set nested_ranger_warning true |
||||||
|
|
||||||
|
# =================================================================== |
||||||
|
# == Local Options |
||||||
|
# =================================================================== |
||||||
|
# You can set local options that only affect a single directory. |
||||||
|
|
||||||
|
# Examples: |
||||||
|
# setlocal path=~/downloads sort mtime |
||||||
|
|
||||||
|
# =================================================================== |
||||||
|
# == Command Aliases in the Console |
||||||
|
# =================================================================== |
||||||
|
|
||||||
|
alias e edit |
||||||
|
alias q quit |
||||||
|
alias q! quit! |
||||||
|
alias qa quitall |
||||||
|
alias qa! quitall! |
||||||
|
alias qall quitall |
||||||
|
alias qall! quitall! |
||||||
|
alias setl setlocal |
||||||
|
|
||||||
|
alias filter scout -prts |
||||||
|
alias hide scout -prtsv |
||||||
|
alias find scout -aets |
||||||
|
alias mark scout -mr |
||||||
|
alias unmark scout -Mr |
||||||
|
alias search scout -rs |
||||||
|
alias search_inc scout -rts |
||||||
|
alias travel scout -aefklst |
||||||
|
|
||||||
|
# =================================================================== |
||||||
|
# == Define keys for the browser |
||||||
|
# =================================================================== |
||||||
|
|
||||||
|
# Basic |
||||||
|
map Q quitall |
||||||
|
map q quit |
||||||
|
copymap q ZZ ZQ |
||||||
|
|
||||||
|
map R reload_cwd |
||||||
|
map F set freeze_files! |
||||||
|
map <C-r> reset |
||||||
|
map <C-l> redraw_window |
||||||
|
map <C-c> abort |
||||||
|
map <esc> change_mode normal |
||||||
|
map ~ set viewmode! |
||||||
|
|
||||||
|
map i display_file |
||||||
|
map <A-j> scroll_preview 1 |
||||||
|
map <A-k> scroll_preview -1 |
||||||
|
map ? help |
||||||
|
map W display_log |
||||||
|
map w taskview_open |
||||||
|
map S shell $SHELL |
||||||
|
|
||||||
|
map : console |
||||||
|
map ; console |
||||||
|
map ! console shell%space |
||||||
|
map @ console -p6 shell %%s |
||||||
|
map # console shell -p%space |
||||||
|
map s console shell%space |
||||||
|
map r chain draw_possible_programs; console open_with%space |
||||||
|
map f console find%space |
||||||
|
map cd console cd%space |
||||||
|
|
||||||
|
map <C-p> chain console; eval fm.ui.console.history_move(-1) |
||||||
|
|
||||||
|
# Change the line mode |
||||||
|
map Mf linemode filename |
||||||
|
map Mi linemode fileinfo |
||||||
|
map Mm linemode mtime |
||||||
|
map Mh linemode humanreadablemtime |
||||||
|
map Mp linemode permissions |
||||||
|
map Ms linemode sizemtime |
||||||
|
map MH linemode sizehumanreadablemtime |
||||||
|
map Mt linemode metatitle |
||||||
|
|
||||||
|
# Tagging / Marking |
||||||
|
map t tag_toggle |
||||||
|
map ut tag_remove |
||||||
|
map "<any> tag_toggle tag=%any |
||||||
|
map <Space> mark_files toggle=True |
||||||
|
map v mark_files all=True toggle=True |
||||||
|
map uv mark_files all=True val=False |
||||||
|
map V toggle_visual_mode |
||||||
|
map uV toggle_visual_mode reverse=True |
||||||
|
|
||||||
|
# For the nostalgics: Midnight Commander bindings |
||||||
|
map <F1> help |
||||||
|
map <F2> rename_append |
||||||
|
map <F3> display_file |
||||||
|
map <F4> edit |
||||||
|
map <F5> copy |
||||||
|
map <F6> cut |
||||||
|
map <F7> console mkdir%space |
||||||
|
map <F8> console delete |
||||||
|
#map <F8> console trash |
||||||
|
map <F10> exit |
||||||
|
|
||||||
|
# In case you work on a keyboard with dvorak layout |
||||||
|
map <UP> move up=1 |
||||||
|
map <DOWN> move down=1 |
||||||
|
map <LEFT> move left=1 |
||||||
|
map <RIGHT> move right=1 |
||||||
|
map <HOME> move to=0 |
||||||
|
map <END> move to=-1 |
||||||
|
map <PAGEDOWN> move down=1 pages=True |
||||||
|
map <PAGEUP> move up=1 pages=True |
||||||
|
map <CR> move right=1 |
||||||
|
#map <DELETE> console delete |
||||||
|
map <INSERT> console touch%space |
||||||
|
|
||||||
|
# VIM-like |
||||||
|
copymap <UP> k |
||||||
|
copymap <DOWN> j |
||||||
|
copymap <LEFT> h |
||||||
|
copymap <RIGHT> l |
||||||
|
copymap <HOME> gg |
||||||
|
copymap <END> G |
||||||
|
copymap <PAGEDOWN> <C-F> |
||||||
|
copymap <PAGEUP> <C-B> |
||||||
|
|
||||||
|
map J move down=0.5 pages=True |
||||||
|
map K move up=0.5 pages=True |
||||||
|
copymap J <C-D> |
||||||
|
copymap K <C-U> |
||||||
|
|
||||||
|
# Jumping around |
||||||
|
map H history_go -1 |
||||||
|
map L history_go 1 |
||||||
|
map ] move_parent 1 |
||||||
|
map [ move_parent -1 |
||||||
|
map } traverse |
||||||
|
map { traverse_backwards |
||||||
|
map ) jump_non |
||||||
|
|
||||||
|
map gh cd ~ |
||||||
|
map ge cd /etc |
||||||
|
map gu cd /usr |
||||||
|
map gd cd /dev |
||||||
|
map gl cd -r . |
||||||
|
map gL cd -r %f |
||||||
|
map go cd /opt |
||||||
|
map gv cd /var |
||||||
|
map gm cd /media |
||||||
|
map gi eval fm.cd('/run/media/' + os.getenv('USER')) |
||||||
|
map gM cd /mnt |
||||||
|
map gs cd /srv |
||||||
|
map gp cd /tmp |
||||||
|
map gr cd / |
||||||
|
map gR eval fm.cd(ranger.RANGERDIR) |
||||||
|
map g/ cd / |
||||||
|
map g? cd /usr/share/doc/ranger |
||||||
|
|
||||||
|
# External Programs |
||||||
|
map E edit |
||||||
|
map du shell -p du --max-depth=1 -h --apparent-size |
||||||
|
map dU shell -p du --max-depth=1 -h --apparent-size | sort -rh |
||||||
|
map yp yank path |
||||||
|
map yd yank dir |
||||||
|
map yn yank name |
||||||
|
map y. yank name_without_extension |
||||||
|
|
||||||
|
# Filesystem Operations |
||||||
|
map = chmod |
||||||
|
|
||||||
|
map cw console rename%space |
||||||
|
map a rename_append |
||||||
|
map A eval fm.open_console('rename ' + fm.thisfile.relative_path.replace("%", "%%")) |
||||||
|
map I eval fm.open_console('rename ' + fm.thisfile.relative_path.replace("%", "%%"), position=7) |
||||||
|
|
||||||
|
map pp paste |
||||||
|
map po paste overwrite=True |
||||||
|
map pP paste append=True |
||||||
|
map pO paste overwrite=True append=True |
||||||
|
map pl paste_symlink relative=False |
||||||
|
map pL paste_symlink relative=True |
||||||
|
map phl paste_hardlink |
||||||
|
map pht paste_hardlinked_subtree |
||||||
|
map pd console paste dest= |
||||||
|
map p`<any> paste dest=%any_path |
||||||
|
map p'<any> paste dest=%any_path |
||||||
|
|
||||||
|
map dD console delete |
||||||
|
map dT console trash |
||||||
|
|
||||||
|
map dd cut |
||||||
|
map ud uncut |
||||||
|
map da cut mode=add |
||||||
|
map dr cut mode=remove |
||||||
|
map dt cut mode=toggle |
||||||
|
|
||||||
|
map yy copy |
||||||
|
map uy uncut |
||||||
|
map ya copy mode=add |
||||||
|
map yr copy mode=remove |
||||||
|
map yt copy mode=toggle |
||||||
|
|
||||||
|
# Temporary workarounds |
||||||
|
map dgg eval fm.cut(dirarg=dict(to=0), narg=quantifier) |
||||||
|
map dG eval fm.cut(dirarg=dict(to=-1), narg=quantifier) |
||||||
|
map dj eval fm.cut(dirarg=dict(down=1), narg=quantifier) |
||||||
|
map dk eval fm.cut(dirarg=dict(up=1), narg=quantifier) |
||||||
|
map ygg eval fm.copy(dirarg=dict(to=0), narg=quantifier) |
||||||
|
map yG eval fm.copy(dirarg=dict(to=-1), narg=quantifier) |
||||||
|
map yj eval fm.copy(dirarg=dict(down=1), narg=quantifier) |
||||||
|
map yk eval fm.copy(dirarg=dict(up=1), narg=quantifier) |
||||||
|
|
||||||
|
# Searching |
||||||
|
map / console search%space |
||||||
|
map n search_next |
||||||
|
map N search_next forward=False |
||||||
|
map ct search_next order=tag |
||||||
|
map cs search_next order=size |
||||||
|
map ci search_next order=mimetype |
||||||
|
map cc search_next order=ctime |
||||||
|
map cm search_next order=mtime |
||||||
|
map ca search_next order=atime |
||||||
|
|
||||||
|
# Tabs |
||||||
|
map <C-n> tab_new |
||||||
|
map <C-w> tab_close |
||||||
|
map <TAB> tab_move 1 |
||||||
|
map <S-TAB> tab_move -1 |
||||||
|
map <A-Right> tab_move 1 |
||||||
|
map <A-Left> tab_move -1 |
||||||
|
map gt tab_move 1 |
||||||
|
map gT tab_move -1 |
||||||
|
map gn tab_new |
||||||
|
map gc tab_close |
||||||
|
map uq tab_restore |
||||||
|
map <a-1> tab_open 1 |
||||||
|
map <a-2> tab_open 2 |
||||||
|
map <a-3> tab_open 3 |
||||||
|
map <a-4> tab_open 4 |
||||||
|
map <a-5> tab_open 5 |
||||||
|
map <a-6> tab_open 6 |
||||||
|
map <a-7> tab_open 7 |
||||||
|
map <a-8> tab_open 8 |
||||||
|
map <a-9> tab_open 9 |
||||||
|
map <a-r> tab_shift 1 |
||||||
|
map <a-l> tab_shift -1 |
||||||
|
|
||||||
|
# Sorting |
||||||
|
map or set sort_reverse! |
||||||
|
map oz set sort=random |
||||||
|
map os chain set sort=size; set sort_reverse=False |
||||||
|
map ob chain set sort=basename; set sort_reverse=False |
||||||
|
map on chain set sort=natural; set sort_reverse=False |
||||||
|
map om chain set sort=mtime; set sort_reverse=False |
||||||
|
map oc chain set sort=ctime; set sort_reverse=False |
||||||
|
map oa chain set sort=atime; set sort_reverse=False |
||||||
|
map ot chain set sort=type; set sort_reverse=False |
||||||
|
map oe chain set sort=extension; set sort_reverse=False |
||||||
|
|
||||||
|
map oS chain set sort=size; set sort_reverse=True |
||||||
|
map oB chain set sort=basename; set sort_reverse=True |
||||||
|
map oN chain set sort=natural; set sort_reverse=True |
||||||
|
map oM chain set sort=mtime; set sort_reverse=True |
||||||
|
map oC chain set sort=ctime; set sort_reverse=True |
||||||
|
map oA chain set sort=atime; set sort_reverse=True |
||||||
|
map oT chain set sort=type; set sort_reverse=True |
||||||
|
map oE chain set sort=extension; set sort_reverse=True |
||||||
|
|
||||||
|
map dc get_cumulative_size |
||||||
|
|
||||||
|
# Settings |
||||||
|
map zc set collapse_preview! |
||||||
|
map zd set sort_directories_first! |
||||||
|
map zh set show_hidden! |
||||||
|
map <C-h> set show_hidden! |
||||||
|
copymap <C-h> <backspace> |
||||||
|
copymap <backspace> <backspace2> |
||||||
|
map zI set flushinput! |
||||||
|
map zi set preview_images! |
||||||
|
map zm set mouse_enabled! |
||||||
|
map zp set preview_files! |
||||||
|
map zP set preview_directories! |
||||||
|
map zs set sort_case_insensitive! |
||||||
|
map zu set autoupdate_cumulative_size! |
||||||
|
map zv set use_preview_script! |
||||||
|
map zf console filter%space |
||||||
|
copymap zf zz |
||||||
|
|
||||||
|
# Filter stack |
||||||
|
map .d filter_stack add type d |
||||||
|
map .f filter_stack add type f |
||||||
|
map .l filter_stack add type l |
||||||
|
map .m console filter_stack add mime%space |
||||||
|
map .n console filter_stack add name%space |
||||||
|
map .# console filter_stack add hash%space |
||||||
|
map ." filter_stack add duplicate |
||||||
|
map .' filter_stack add unique |
||||||
|
map .| filter_stack add or |
||||||
|
map .& filter_stack add and |
||||||
|
map .! filter_stack add not |
||||||
|
map .r filter_stack rotate |
||||||
|
map .c filter_stack clear |
||||||
|
map .* filter_stack decompose |
||||||
|
map .p filter_stack pop |
||||||
|
map .. filter_stack show |
||||||
|
|
||||||
|
# Bookmarks |
||||||
|
map `<any> enter_bookmark %any |
||||||
|
map '<any> enter_bookmark %any |
||||||
|
map m<any> set_bookmark %any |
||||||
|
map um<any> unset_bookmark %any |
||||||
|
|
||||||
|
map m<bg> draw_bookmarks |
||||||
|
copymap m<bg> um<bg> `<bg> '<bg> p`<bg> p'<bg> |
||||||
|
|
||||||
|
# Generate all the chmod bindings with some python help: |
||||||
|
eval for arg in "rwxXst": cmd("map +u{0} shell -f chmod u+{0} %s".format(arg)) |
||||||
|
eval for arg in "rwxXst": cmd("map +g{0} shell -f chmod g+{0} %s".format(arg)) |
||||||
|
eval for arg in "rwxXst": cmd("map +o{0} shell -f chmod o+{0} %s".format(arg)) |
||||||
|
eval for arg in "rwxXst": cmd("map +a{0} shell -f chmod a+{0} %s".format(arg)) |
||||||
|
eval for arg in "rwxXst": cmd("map +{0} shell -f chmod +{0} %s".format(arg)) |
||||||
|
|
||||||
|
eval for arg in "rwxXst": cmd("map -u{0} shell -f chmod u-{0} %s".format(arg)) |
||||||
|
eval for arg in "rwxXst": cmd("map -g{0} shell -f chmod g-{0} %s".format(arg)) |
||||||
|
eval for arg in "rwxXst": cmd("map -o{0} shell -f chmod o-{0} %s".format(arg)) |
||||||
|
eval for arg in "rwxXst": cmd("map -a{0} shell -f chmod a-{0} %s".format(arg)) |
||||||
|
eval for arg in "rwxXst": cmd("map -{0} shell -f chmod -{0} %s".format(arg)) |
||||||
|
|
||||||
|
# =================================================================== |
||||||
|
# == Define keys for the console |
||||||
|
# =================================================================== |
||||||
|
# Note: Unmapped keys are passed directly to the console. |
||||||
|
|
||||||
|
# Basic |
||||||
|
cmap <tab> eval fm.ui.console.tab() |
||||||
|
cmap <s-tab> eval fm.ui.console.tab(-1) |
||||||
|
cmap <ESC> eval fm.ui.console.close() |
||||||
|
cmap <CR> eval fm.ui.console.execute() |
||||||
|
cmap <C-l> redraw_window |
||||||
|
|
||||||
|
copycmap <ESC> <C-c> |
||||||
|
copycmap <CR> <C-j> |
||||||
|
|
||||||
|
# Move around |
||||||
|
cmap <up> eval fm.ui.console.history_move(-1) |
||||||
|
cmap <down> eval fm.ui.console.history_move(1) |
||||||
|
cmap <left> eval fm.ui.console.move(left=1) |
||||||
|
cmap <right> eval fm.ui.console.move(right=1) |
||||||
|
cmap <home> eval fm.ui.console.move(right=0, absolute=True) |
||||||
|
cmap <end> eval fm.ui.console.move(right=-1, absolute=True) |
||||||
|
cmap <a-b> eval fm.ui.console.move_word(left=1) |
||||||
|
cmap <a-f> eval fm.ui.console.move_word(right=1) |
||||||
|
|
||||||
|
copycmap <a-b> <a-left> |
||||||
|
copycmap <a-f> <a-right> |
||||||
|
|
||||||
|
# Line Editing |
||||||
|
cmap <backspace> eval fm.ui.console.delete(-1) |
||||||
|
cmap <delete> eval fm.ui.console.delete(0) |
||||||
|
cmap <C-w> eval fm.ui.console.delete_word() |
||||||
|
cmap <A-d> eval fm.ui.console.delete_word(backward=False) |
||||||
|
cmap <C-k> eval fm.ui.console.delete_rest(1) |
||||||
|
cmap <C-u> eval fm.ui.console.delete_rest(-1) |
||||||
|
cmap <C-y> eval fm.ui.console.paste() |
||||||
|
|
||||||
|
# And of course the emacs way |
||||||
|
copycmap <ESC> <C-g> |
||||||
|
copycmap <up> <C-p> |
||||||
|
copycmap <down> <C-n> |
||||||
|
copycmap <left> <C-b> |
||||||
|
copycmap <right> <C-f> |
||||||
|
copycmap <home> <C-a> |
||||||
|
copycmap <end> <C-e> |
||||||
|
copycmap <delete> <C-d> |
||||||
|
copycmap <backspace> <C-h> |
||||||
|
|
||||||
|
# Note: There are multiple ways to express backspaces. <backspace> (code 263) |
||||||
|
# and <backspace2> (code 127). To be sure, use both. |
||||||
|
copycmap <backspace> <backspace2> |
||||||
|
|
||||||
|
# This special expression allows typing in numerals: |
||||||
|
cmap <allow_quantifiers> false |
||||||
|
|
||||||
|
# =================================================================== |
||||||
|
# == Pager Keybindings |
||||||
|
# =================================================================== |
||||||
|
|
||||||
|
# Movement |
||||||
|
pmap <down> pager_move down=1 |
||||||
|
pmap <up> pager_move up=1 |
||||||
|
pmap <left> pager_move left=4 |
||||||
|
pmap <right> pager_move right=4 |
||||||
|
pmap <home> pager_move to=0 |
||||||
|
pmap <end> pager_move to=-1 |
||||||
|
pmap <pagedown> pager_move down=1.0 pages=True |
||||||
|
pmap <pageup> pager_move up=1.0 pages=True |
||||||
|
pmap <C-d> pager_move down=0.5 pages=True |
||||||
|
pmap <C-u> pager_move up=0.5 pages=True |
||||||
|
|
||||||
|
copypmap <UP> k <C-p> |
||||||
|
copypmap <DOWN> j <C-n> <CR> |
||||||
|
copypmap <LEFT> h |
||||||
|
copypmap <RIGHT> l |
||||||
|
copypmap <HOME> g |
||||||
|
copypmap <END> G |
||||||
|
copypmap <C-d> d |
||||||
|
copypmap <C-u> u |
||||||
|
copypmap <PAGEDOWN> n f <C-F> <Space> |
||||||
|
copypmap <PAGEUP> p b <C-B> |
||||||
|
|
||||||
|
# Basic |
||||||
|
pmap <C-l> redraw_window |
||||||
|
pmap <ESC> pager_close |
||||||
|
copypmap <ESC> q Q i <F3> |
||||||
|
pmap E edit_file |
||||||
|
|
||||||
|
# =================================================================== |
||||||
|
# == Taskview Keybindings |
||||||
|
# =================================================================== |
||||||
|
|
||||||
|
# Movement |
||||||
|
tmap <up> taskview_move up=1 |
||||||
|
tmap <down> taskview_move down=1 |
||||||
|
tmap <home> taskview_move to=0 |
||||||
|
tmap <end> taskview_move to=-1 |
||||||
|
tmap <pagedown> taskview_move down=1.0 pages=True |
||||||
|
tmap <pageup> taskview_move up=1.0 pages=True |
||||||
|
tmap <C-d> taskview_move down=0.5 pages=True |
||||||
|
tmap <C-u> taskview_move up=0.5 pages=True |
||||||
|
|
||||||
|
copytmap <UP> k <C-p> |
||||||
|
copytmap <DOWN> j <C-n> <CR> |
||||||
|
copytmap <HOME> g |
||||||
|
copytmap <END> G |
||||||
|
copytmap <C-u> u |
||||||
|
copytmap <PAGEDOWN> n f <C-F> <Space> |
||||||
|
copytmap <PAGEUP> p b <C-B> |
||||||
|
|
||||||
|
# Changing priority and deleting tasks |
||||||
|
tmap J eval -q fm.ui.taskview.task_move(-1) |
||||||
|
tmap K eval -q fm.ui.taskview.task_move(0) |
||||||
|
tmap dd eval -q fm.ui.taskview.task_remove() |
||||||
|
tmap <pagedown> eval -q fm.ui.taskview.task_move(-1) |
||||||
|
tmap <pageup> eval -q fm.ui.taskview.task_move(0) |
||||||
|
tmap <delete> eval -q fm.ui.taskview.task_remove() |
||||||
|
|
||||||
|
# Basic |
||||||
|
tmap <C-l> redraw_window |
||||||
|
tmap <ESC> taskview_close |
||||||
|
copytmap <ESC> q Q w <C-c> |
@ -0,0 +1,291 @@ |
|||||||
|
# vim: ft=cfg |
||||||
|
# |
||||||
|
# This is the configuration file of "rifle", ranger's file executor/opener. |
||||||
|
# Each line consists of conditions and a command. For each line the conditions |
||||||
|
# are checked and if they are met, the respective command is run. |
||||||
|
# |
||||||
|
# Syntax: |
||||||
|
# <condition1> , <condition2> , ... = command |
||||||
|
# |
||||||
|
# The command can contain these environment variables: |
||||||
|
# $1-$9 | The n-th selected file |
||||||
|
# $@ | All selected files |
||||||
|
# |
||||||
|
# If you use the special command "ask", rifle will ask you what program to run. |
||||||
|
# |
||||||
|
# Prefixing a condition with "!" will negate its result. |
||||||
|
# These conditions are currently supported: |
||||||
|
# match <regexp> | The regexp matches $1 |
||||||
|
# ext <regexp> | The regexp matches the extension of $1 |
||||||
|
# mime <regexp> | The regexp matches the mime type of $1 |
||||||
|
# name <regexp> | The regexp matches the basename of $1 |
||||||
|
# path <regexp> | The regexp matches the absolute path of $1 |
||||||
|
# has <program> | The program is installed (i.e. located in $PATH) |
||||||
|
# env <variable> | The environment variable "variable" is non-empty |
||||||
|
# file | $1 is a file |
||||||
|
# directory | $1 is a directory |
||||||
|
# number <n> | change the number of this command to n |
||||||
|
# terminal | stdin, stderr and stdout are connected to a terminal |
||||||
|
# X | A graphical environment is available (darwin, Xorg, or Wayland) |
||||||
|
# |
||||||
|
# There are also pseudo-conditions which have a "side effect": |
||||||
|
# flag <flags> | Change how the program is run. See below. |
||||||
|
# label <label> | Assign a label or name to the command so it can |
||||||
|
# | be started with :open_with <label> in ranger |
||||||
|
# | or `rifle -p <label>` in the standalone executable. |
||||||
|
# else | Always true. |
||||||
|
# |
||||||
|
# Flags are single characters which slightly transform the command: |
||||||
|
# f | Fork the program, make it run in the background. |
||||||
|
# | New command = setsid $command >& /dev/null & |
||||||
|
# r | Execute the command with root permissions |
||||||
|
# | New command = sudo $command |
||||||
|
# t | Run the program in a new terminal. If $TERMCMD is not defined, |
||||||
|
# | rifle will attempt to extract it from $TERM. |
||||||
|
# | New command = $TERMCMD -e $command |
||||||
|
# Note: The "New command" serves only as an illustration, the exact |
||||||
|
# implementation may differ. |
||||||
|
# Note: When using rifle in ranger, there is an additional flag "c" for |
||||||
|
# only running the current file even if you have marked multiple files. |
||||||
|
|
||||||
|
#------------------------------------------- |
||||||
|
# Websites |
||||||
|
#------------------------------------------- |
||||||
|
# Rarely installed browsers get higher priority; It is assumed that if you |
||||||
|
# install a rare browser, you probably use it. Firefox/konqueror/w3m on the |
||||||
|
# other hand are often only installed as fallback browsers. |
||||||
|
ext x?html?, has surf, X, flag f = surf -- file://"$1" |
||||||
|
ext x?html?, has vimprobable, X, flag f = vimprobable -- "$@" |
||||||
|
ext x?html?, has vimprobable2, X, flag f = vimprobable2 -- "$@" |
||||||
|
ext x?html?, has qutebrowser, X, flag f = qutebrowser -- "$@" |
||||||
|
ext x?html?, has dwb, X, flag f = dwb -- "$@" |
||||||
|
ext x?html?, has jumanji, X, flag f = jumanji -- "$@" |
||||||
|
ext x?html?, has luakit, X, flag f = luakit -- "$@" |
||||||
|
ext x?html?, has uzbl, X, flag f = uzbl -- "$@" |
||||||
|
ext x?html?, has uzbl-tabbed, X, flag f = uzbl-tabbed -- "$@" |
||||||
|
ext x?html?, has uzbl-browser, X, flag f = uzbl-browser -- "$@" |
||||||
|
ext x?html?, has uzbl-core, X, flag f = uzbl-core -- "$@" |
||||||
|
ext x?html?, has midori, X, flag f = midori -- "$@" |
||||||
|
ext x?html?, has opera, X, flag f = opera -- "$@" |
||||||
|
ext x?html?, has firefox, X, flag f = firefox -- "$@" |
||||||
|
ext x?html?, has seamonkey, X, flag f = seamonkey -- "$@" |
||||||
|
ext x?html?, has iceweasel, X, flag f = iceweasel -- "$@" |
||||||
|
ext x?html?, has chromium-browser, X, flag f = chromium-browser -- "$@" |
||||||
|
ext x?html?, has chromium, X, flag f = chromium -- "$@" |
||||||
|
ext x?html?, has google-chrome, X, flag f = google-chrome -- "$@" |
||||||
|
ext x?html?, has epiphany, X, flag f = epiphany -- "$@" |
||||||
|
ext x?html?, has konqueror, X, flag f = konqueror -- "$@" |
||||||
|
ext x?html?, has elinks, terminal = elinks "$@" |
||||||
|
ext x?html?, has links2, terminal = links2 "$@" |
||||||
|
ext x?html?, has links, terminal = links "$@" |
||||||
|
ext x?html?, has lynx, terminal = lynx -- "$@" |
||||||
|
ext x?html?, has w3m, terminal = w3m "$@" |
||||||
|
|
||||||
|
#------------------------------------------- |
||||||
|
# Misc |
||||||
|
#------------------------------------------- |
||||||
|
# Define the "editor" for text files as first action |
||||||
|
mime ^text, label editor = ${VISUAL:-$EDITOR} -- "$@" |
||||||
|
mime ^text, label pager = $PAGER -- "$@" |
||||||
|
!mime ^text, label editor, ext xml|json|csv|tex|py|pl|rb|rs|js|sh|php = ${VISUAL:-$EDITOR} -- "$@" |
||||||
|
!mime ^text, label pager, ext xml|json|csv|tex|py|pl|rb|rs|js|sh|php = $PAGER -- "$@" |
||||||
|
|
||||||
|
ext 1 = man "$1" |
||||||
|
ext s[wmf]c, has zsnes, X = zsnes "$1" |
||||||
|
ext s[wmf]c, has snes9x-gtk,X = snes9x-gtk "$1" |
||||||
|
ext nes, has fceux, X = fceux "$1" |
||||||
|
ext exe, has wine = wine "$1" |
||||||
|
name ^[mM]akefile$ = make |
||||||
|
|
||||||
|
#-------------------------------------------- |
||||||
|
# Scripts |
||||||
|
#------------------------------------------- |
||||||
|
ext py = python -- "$1" |
||||||
|
ext pl = perl -- "$1" |
||||||
|
ext rb = ruby -- "$1" |
||||||
|
ext js = node -- "$1" |
||||||
|
ext sh = sh -- "$1" |
||||||
|
ext php = php -- "$1" |
||||||
|
|
||||||
|
#-------------------------------------------- |
||||||
|
# Audio without X |
||||||
|
#------------------------------------------- |
||||||
|
mime ^audio|ogg$, terminal, has mpv = mpv -- "$@" |
||||||
|
mime ^audio|ogg$, terminal, has mplayer2 = mplayer2 -- "$@" |
||||||
|
mime ^audio|ogg$, terminal, has mplayer = mplayer -- "$@" |
||||||
|
ext midi?, terminal, has wildmidi = wildmidi -- "$@" |
||||||
|
|
||||||
|
#-------------------------------------------- |
||||||
|
# Video/Audio with a GUI |
||||||
|
#------------------------------------------- |
||||||
|
mime ^video|^audio, has gmplayer, X, flag f = gmplayer -- "$@" |
||||||
|
mime ^video|^audio, has smplayer, X, flag f = smplayer "$@" |
||||||
|
mime ^video, has mpv, X, flag f = mpv -- "$@" |
||||||
|
mime ^video, has mpv, X, flag f = mpv --fs -- "$@" |
||||||
|
mime ^video, has mplayer2, X, flag f = mplayer2 -- "$@" |
||||||
|
mime ^video, has mplayer2, X, flag f = mplayer2 -fs -- "$@" |
||||||
|
mime ^video, has mplayer, X, flag f = mplayer -- "$@" |
||||||
|
mime ^video, has mplayer, X, flag f = mplayer -fs -- "$@" |
||||||
|
mime ^video|^audio, has vlc, X, flag f = vlc -- "$@" |
||||||
|
mime ^video|^audio, has totem, X, flag f = totem -- "$@" |
||||||
|
mime ^video|^audio, has totem, X, flag f = totem --fullscreen -- "$@" |
||||||
|
mime ^audio, has audacity, X, flag f = audacity -- "$@" |
||||||
|
ext aup, has audacity, X, flag f = audacity -- "$@" |
||||||
|
|
||||||
|
#-------------------------------------------- |
||||||
|
# Video without X |
||||||
|
#------------------------------------------- |
||||||
|
mime ^video, terminal, !X, has mpv = mpv -- "$@" |
||||||
|
mime ^video, terminal, !X, has mplayer2 = mplayer2 -- "$@" |
||||||
|
mime ^video, terminal, !X, has mplayer = mplayer -- "$@" |
||||||
|
|
||||||
|
#------------------------------------------- |
||||||
|
# Documents |
||||||
|
#------------------------------------------- |
||||||
|
ext pdf, has llpp, X, flag f = llpp "$@" |
||||||
|
ext pdf, has zathura, X, flag f = zathura -- "$@" |
||||||
|
ext pdf, has mupdf, X, flag f = mupdf "$@" |
||||||
|
ext pdf, has mupdf-x11,X, flag f = mupdf-x11 "$@" |
||||||
|
ext pdf, has apvlv, X, flag f = apvlv -- "$@" |
||||||
|
ext pdf, has xpdf, X, flag f = xpdf -- "$@" |
||||||
|
ext pdf, has evince, X, flag f = evince -- "$@" |
||||||
|
ext pdf, has atril, X, flag f = atril -- "$@" |
||||||
|
ext pdf, has okular, X, flag f = okular -- "$@" |
||||||
|
ext pdf, has epdfview, X, flag f = epdfview -- "$@" |
||||||
|
ext pdf, has qpdfview, X, flag f = qpdfview "$@" |
||||||
|
ext pdf, has open, X, flag f = open "$@" |
||||||
|
|
||||||
|
ext sc, has sc, = sc -- "$@" |
||||||
|
ext docx?, has catdoc, terminal = catdoc -- "$@" | $PAGER |
||||||
|
|
||||||
|
ext sxc|xlsx?|xlt|xlw|gnm|gnumeric, has gnumeric, X, flag f = gnumeric -- "$@" |
||||||
|
ext sxc|xlsx?|xlt|xlw|gnm|gnumeric, has kspread, X, flag f = kspread -- "$@" |
||||||
|
ext pptx?|od[dfgpst]|docx?|sxc|xlsx?|xlt|xlw|gnm|gnumeric, has libreoffice, X, flag f = libreoffice "$@" |
||||||
|
ext pptx?|od[dfgpst]|docx?|sxc|xlsx?|xlt|xlw|gnm|gnumeric, has soffice, X, flag f = soffice "$@" |
||||||
|
ext pptx?|od[dfgpst]|docx?|sxc|xlsx?|xlt|xlw|gnm|gnumeric, has ooffice, X, flag f = ooffice "$@" |
||||||
|
|
||||||
|
ext djvu, has zathura,X, flag f = zathura -- "$@" |
||||||
|
ext djvu, has evince, X, flag f = evince -- "$@" |
||||||
|
ext djvu, has atril, X, flag f = atril -- "$@" |
||||||
|
ext djvu, has djview, X, flag f = djview -- "$@" |
||||||
|
|
||||||
|
ext epub, has ebook-viewer, X, flag f = ebook-viewer -- "$@" |
||||||
|
ext epub, has zathura, X, flag f = zathura -- "$@" |
||||||
|
ext epub, has mupdf, X, flag f = mupdf -- "$@" |
||||||
|
ext mobi, has ebook-viewer, X, flag f = ebook-viewer -- "$@" |
||||||
|
|
||||||
|
ext cbr, has zathura, X, flag f = zathura -- "$@" |
||||||
|
ext cbz, has zathura, X, flag f = zathura -- "$@" |
||||||
|
|
||||||
|
ext sla, has scribus, X, flag f = scribus -- "$@" |
||||||
|
|
||||||
|
#------------------------------------------- |
||||||
|
# Images |
||||||
|
#------------------------------------------- |
||||||
|
mime ^image/svg, has inkscape, X, flag f = inkscape -- "$@" |
||||||
|
mime ^image/svg, has display, X, flag f = display -- "$@" |
||||||
|
|
||||||
|
mime ^image, has imv, X, flag f = imv -- "$@" |
||||||
|
mime ^image, has pqiv, X, flag f = pqiv -- "$@" |
||||||
|
mime ^image, has sxiv, X, flag f = sxiv -- "$@" |
||||||
|
mime ^image, has feh, X, flag f, !ext gif = feh -- "$@" |
||||||
|
mime ^image, has mirage, X, flag f = mirage -- "$@" |
||||||
|
mime ^image, has ristretto, X, flag f = ristretto "$@" |
||||||
|
mime ^image, has eog, X, flag f = eog -- "$@" |
||||||
|
mime ^image, has eom, X, flag f = eom -- "$@" |
||||||
|
mime ^image, has nomacs, X, flag f = nomacs -- "$@" |
||||||
|
mime ^image, has geeqie, X, flag f = geeqie -- "$@" |
||||||
|
mime ^image, has gpicview, X, flag f = gpicview -- "$@" |
||||||
|
mime ^image, has gwenview, X, flag f = gwenview -- "$@" |
||||||
|
mime ^image, has gimp, X, flag f = gimp -- "$@" |
||||||
|
mime ^image, has krita, X, flag f = krita -- "$@" |
||||||
|
ext kra, has krita, X, flag f = krita -- "$@" |
||||||
|
ext xcf, X, flag f = gimp -- "$@" |
||||||
|
|
||||||
|
#------------------------------------------- |
||||||
|
# Archives |
||||||
|
#------------------------------------------- |
||||||
|
|
||||||
|
# avoid password prompt by providing empty password |
||||||
|
ext 7z, has 7z = 7z -p l "$@" | $PAGER |
||||||
|
# This requires atool |
||||||
|
ext ace|ar|arc|bz2?|cab|cpio|cpt|deb|dgc|dmg|gz, has atool = atool --list --each -- "$@" | $PAGER |
||||||
|
ext iso|jar|msi|pkg|rar|shar|tar|tgz|xar|xpi|xz|zip, has atool = atool --list --each -- "$@" | $PAGER |
||||||
|
ext 7z|ace|ar|arc|bz2?|cab|cpio|cpt|deb|dgc|dmg|gz, has atool = atool --extract --each -- "$@" |
||||||
|
ext iso|jar|msi|pkg|rar|shar|tar|tgz|xar|xpi|xz|zip, has atool = atool --extract --each -- "$@" |
||||||
|
|
||||||
|
# Listing and extracting archives without atool: |
||||||
|
ext tar|gz|bz2|xz, has tar = tar vvtf "$1" | $PAGER |
||||||
|
ext tar|gz|bz2|xz, has tar = for file in "$@"; do tar vvxf "$file"; done |
||||||
|
ext bz2, has bzip2 = for file in "$@"; do bzip2 -dk "$file"; done |
||||||
|
ext zip, has unzip = unzip -l "$1" | less |
||||||
|
ext zip, has unzip = for file in "$@"; do unzip -d "${file%.*}" "$file"; done |
||||||
|
ext ace, has unace = unace l "$1" | less |
||||||
|
ext ace, has unace = for file in "$@"; do unace e "$file"; done |
||||||
|
ext rar, has unrar = unrar l "$1" | less |
||||||
|
ext rar, has unrar = for file in "$@"; do unrar x "$file"; done |
||||||
|
|
||||||
|
#------------------------------------------- |
||||||
|
# Fonts |
||||||
|
#------------------------------------------- |
||||||
|
mime ^font, has fontforge, X, flag f = fontforge "$@" |
||||||
|
|
||||||
|
#------------------------------------------- |
||||||
|
# Flag t fallback terminals |
||||||
|
#------------------------------------------- |
||||||
|
# Rarely installed terminal emulators get higher priority; It is assumed that |
||||||
|
# if you install a rare terminal emulator, you probably use it. |
||||||
|
# gnome-terminal/konsole/xterm on the other hand are often installed as part of |
||||||
|
# a desktop environment or as fallback terminal emulators. |
||||||
|
mime ^ranger/x-terminal-emulator, has terminology = terminology -e "$@" |
||||||
|
mime ^ranger/x-terminal-emulator, has kitty = kitty -- "$@" |
||||||
|
mime ^ranger/x-terminal-emulator, has alacritty = alacritty -e "$@" |
||||||
|
mime ^ranger/x-terminal-emulator, has sakura = sakura -e "$@" |
||||||
|
mime ^ranger/x-terminal-emulator, has lilyterm = lilyterm -e "$@" |
||||||
|
#mime ^ranger/x-terminal-emulator, has cool-retro-term = cool-retro-term -e "$@" |
||||||
|
mime ^ranger/x-terminal-emulator, has termite = termite -x '"$@"' |
||||||
|
#mime ^ranger/x-terminal-emulator, has yakuake = yakuake -e "$@" |
||||||
|
mime ^ranger/x-terminal-emulator, has guake = guake -ne "$@" |
||||||
|
mime ^ranger/x-terminal-emulator, has tilda = tilda -c "$@" |
||||||
|
mime ^ranger/x-terminal-emulator, has st = st -e "$@" |
||||||
|
mime ^ranger/x-terminal-emulator, has terminator = terminator -x "$@" |
||||||
|
mime ^ranger/x-terminal-emulator, has urxvt = urxvt -e "$@" |
||||||
|
mime ^ranger/x-terminal-emulator, has pantheon-terminal = pantheon-terminal -e "$@" |
||||||
|
mime ^ranger/x-terminal-emulator, has lxterminal = lxterminal -e "$@" |
||||||
|
mime ^ranger/x-terminal-emulator, has mate-terminal = mate-terminal -x "$@" |
||||||
|
mime ^ranger/x-terminal-emulator, has xfce4-terminal = xfce4-terminal -x "$@" |
||||||
|
mime ^ranger/x-terminal-emulator, has konsole = konsole -e "$@" |
||||||
|
mime ^ranger/x-terminal-emulator, has gnome-terminal = gnome-terminal -- "$@" |
||||||
|
mime ^ranger/x-terminal-emulator, has xterm = xterm -e "$@" |
||||||
|
|
||||||
|
#------------------------------------------- |
||||||
|
# Misc |
||||||
|
#------------------------------------------- |
||||||
|
label wallpaper, number 11, mime ^image, has feh, X = feh --bg-scale "$1" |
||||||
|
label wallpaper, number 12, mime ^image, has feh, X = feh --bg-tile "$1" |
||||||
|
label wallpaper, number 13, mime ^image, has feh, X = feh --bg-center "$1" |
||||||
|
label wallpaper, number 14, mime ^image, has feh, X = feh --bg-fill "$1" |
||||||
|
|
||||||
|
#------------------------------------------- |
||||||
|
# Generic file openers |
||||||
|
#------------------------------------------- |
||||||
|
label open, has xdg-open = xdg-open "$@" |
||||||
|
label open, has open = open -- "$@" |
||||||
|
|
||||||
|
# Define the editor for non-text files + pager as last action |
||||||
|
!mime ^text, !ext xml|json|csv|tex|py|pl|rb|rs|js|sh|php = ask |
||||||
|
label editor, !mime ^text, !ext xml|json|csv|tex|py|pl|rb|rs|js|sh|php = ${VISUAL:-$EDITOR} -- "$@" |
||||||
|
label pager, !mime ^text, !ext xml|json|csv|tex|py|pl|rb|rs|js|sh|php = $PAGER -- "$@" |
||||||
|
|
||||||
|
|
||||||
|
###################################################################### |
||||||
|
# The actions below are left so low down in this file on purpose, so # |
||||||
|
# they are never triggered accidentally. # |
||||||
|
###################################################################### |
||||||
|
|
||||||
|
# Execute a file as program/script. |
||||||
|
mime application/x-executable = "$1" |
||||||
|
|
||||||
|
# Move the file to trash using trash-cli. |
||||||
|
label trash, has trash-put = trash-put -- "$@" |
||||||
|
label trash = mkdir -p -- "${XDG_DATA_HOME:-$HOME/.local/share}/ranger/trash"; mv -- "$@" "${XDG_DATA_HOME:-$HOME/.local/share}/ranger/trash" |
@ -0,0 +1,350 @@ |
|||||||
|
#!/usr/bin/env bash |
||||||
|
|
||||||
|
set -o noclobber -o noglob -o nounset -o pipefail |
||||||
|
IFS=$'\n' |
||||||
|
|
||||||
|
## If the option `use_preview_script` is set to `true`, |
||||||
|
## then this script will be called and its output will be displayed in ranger. |
||||||
|
## ANSI color codes are supported. |
||||||
|
## STDIN is disabled, so interactive scripts won't work properly |
||||||
|
|
||||||
|
## This script is considered a configuration file and must be updated manually. |
||||||
|
## It will be left untouched if you upgrade ranger. |
||||||
|
|
||||||
|
## Because of some automated testing we do on the script #'s for comments need |
||||||
|
## to be doubled up. Code that is commented out, because it's an alternative for |
||||||
|
## example, gets only one #. |
||||||
|
|
||||||
|
## Meanings of exit codes: |
||||||
|
## code | meaning | action of ranger |
||||||
|
## -----+------------+------------------------------------------- |
||||||
|
## 0 | success | Display stdout as preview |
||||||
|
## 1 | no preview | Display no preview at all |
||||||
|
## 2 | plain text | Display the plain content of the file |
||||||
|
## 3 | fix width | Don't reload when width changes |
||||||
|
## 4 | fix height | Don't reload when height changes |
||||||
|
## 5 | fix both | Don't ever reload |
||||||
|
## 6 | image | Display the image `$IMAGE_CACHE_PATH` points to as an image preview |
||||||
|
## 7 | image | Display the file directly as an image |
||||||
|
|
||||||
|
## Script arguments |
||||||
|
FILE_PATH="${1}" # Full path of the highlighted file |
||||||
|
PV_WIDTH="${2}" # Width of the preview pane (number of fitting characters) |
||||||
|
## shellcheck disable=SC2034 # PV_HEIGHT is provided for convenience and unused |
||||||
|
PV_HEIGHT="${3}" # Height of the preview pane (number of fitting characters) |
||||||
|
IMAGE_CACHE_PATH="${4}" # Full path that should be used to cache image preview |
||||||
|
PV_IMAGE_ENABLED="${5}" # 'True' if image previews are enabled, 'False' otherwise. |
||||||
|
|
||||||
|
FILE_EXTENSION="${FILE_PATH##*.}" |
||||||
|
FILE_EXTENSION_LOWER="$(printf "%s" "${FILE_EXTENSION}" | tr '[:upper:]' '[:lower:]')" |
||||||
|
|
||||||
|
## Settings |
||||||
|
HIGHLIGHT_SIZE_MAX=262143 # 256KiB |
||||||
|
HIGHLIGHT_TABWIDTH=${HIGHLIGHT_TABWIDTH:-8} |
||||||
|
HIGHLIGHT_STYLE=${HIGHLIGHT_STYLE:-pablo} |
||||||
|
HIGHLIGHT_OPTIONS="--replace-tabs=${HIGHLIGHT_TABWIDTH} --style=${HIGHLIGHT_STYLE} ${HIGHLIGHT_OPTIONS:-}" |
||||||
|
PYGMENTIZE_STYLE=${PYGMENTIZE_STYLE:-autumn} |
||||||
|
OPENSCAD_IMGSIZE=${RNGR_OPENSCAD_IMGSIZE:-1000,1000} |
||||||
|
OPENSCAD_COLORSCHEME=${RNGR_OPENSCAD_COLORSCHEME:-Tomorrow Night} |
||||||
|
|
||||||
|
handle_extension() { |
||||||
|
case "${FILE_EXTENSION_LOWER}" in |
||||||
|
## Archive |
||||||
|
a|ace|alz|arc|arj|bz|bz2|cab|cpio|deb|gz|jar|lha|lz|lzh|lzma|lzo|\ |
||||||
|
rpm|rz|t7z|tar|tbz|tbz2|tgz|tlz|txz|tZ|tzo|war|xpi|xz|Z|zip) |
||||||
|
atool --list -- "${FILE_PATH}" && exit 5 |
||||||
|
bsdtar --list --file "${FILE_PATH}" && exit 5 |
||||||
|
exit 1;; |
||||||
|
rar) |
||||||
|
## Avoid password prompt by providing empty password |
||||||
|
unrar lt -p- -- "${FILE_PATH}" && exit 5 |
||||||
|
exit 1;; |
||||||
|
7z) |
||||||
|
## Avoid password prompt by providing empty password |
||||||
|
7z l -p -- "${FILE_PATH}" && exit 5 |
||||||
|
exit 1;; |
||||||
|
|
||||||
|
## PDF |
||||||
|
pdf) |
||||||
|
## Preview as text conversion |
||||||
|
pdftotext -l 10 -nopgbrk -q -- "${FILE_PATH}" - | \ |
||||||
|
fmt -w "${PV_WIDTH}" && exit 5 |
||||||
|
mutool draw -F txt -i -- "${FILE_PATH}" 1-10 | \ |
||||||
|
fmt -w "${PV_WIDTH}" && exit 5 |
||||||
|
exiftool "${FILE_PATH}" && exit 5 |
||||||
|
exit 1;; |
||||||
|
|
||||||
|
## BitTorrent |
||||||
|
torrent) |
||||||
|
transmission-show -- "${FILE_PATH}" && exit 5 |
||||||
|
exit 1;; |
||||||
|
|
||||||
|
## OpenDocument |
||||||
|
odt|ods|odp|sxw) |
||||||
|
## Preview as text conversion |
||||||
|
odt2txt "${FILE_PATH}" && exit 5 |
||||||
|
## Preview as markdown conversion |
||||||
|
pandoc -s -t markdown -- "${FILE_PATH}" && exit 5 |
||||||
|
exit 1;; |
||||||
|
|
||||||
|
## XLSX |
||||||
|
xlsx) |
||||||
|
## Preview as csv conversion |
||||||
|
## Uses: https://github.com/dilshod/xlsx2csv |
||||||
|
xlsx2csv -- "${FILE_PATH}" && exit 5 |
||||||
|
exit 1;; |
||||||
|
|
||||||
|
## HTML |
||||||
|
htm|html|xhtml) |
||||||
|
## Preview as text conversion |
||||||
|
w3m -dump "${FILE_PATH}" && exit 5 |
||||||
|
lynx -dump -- "${FILE_PATH}" && exit 5 |
||||||
|
elinks -dump "${FILE_PATH}" && exit 5 |
||||||
|
pandoc -s -t markdown -- "${FILE_PATH}" && exit 5 |
||||||
|
;; |
||||||
|
|
||||||
|
## JSON |
||||||
|
json) |
||||||
|
jq --color-output . "${FILE_PATH}" && exit 5 |
||||||
|
python -m json.tool -- "${FILE_PATH}" && exit 5 |
||||||
|
;; |
||||||
|
|
||||||
|
## Direct Stream Digital/Transfer (DSDIFF) and wavpack aren't detected |
||||||
|
## by file(1). |
||||||
|
dff|dsf|wv|wvc) |
||||||
|
mediainfo "${FILE_PATH}" && exit 5 |
||||||
|
exiftool "${FILE_PATH}" && exit 5 |
||||||
|
;; # Continue with next handler on failure |
||||||
|
esac |
||||||
|
} |
||||||
|
|
||||||
|
handle_image() { |
||||||
|
## Size of the preview if there are multiple options or it has to be |
||||||
|
## rendered from vector graphics. If the conversion program allows |
||||||
|
## specifying only one dimension while keeping the aspect ratio, the width |
||||||
|
## will be used. |
||||||
|
local DEFAULT_SIZE="1920x1080" |
||||||
|
|
||||||
|
local mimetype="${1}" |
||||||
|
case "${mimetype}" in |
||||||
|
## SVG |
||||||
|
# image/svg+xml|image/svg) |
||||||
|
# convert -- "${FILE_PATH}" "${IMAGE_CACHE_PATH}" && exit 6 |
||||||
|
# exit 1;; |
||||||
|
|
||||||
|
## DjVu |
||||||
|
# image/vnd.djvu) |
||||||
|
# ddjvu -format=tiff -quality=90 -page=1 -size="${DEFAULT_SIZE}" \ |
||||||
|
# - "${IMAGE_CACHE_PATH}" < "${FILE_PATH}" \ |
||||||
|
# && exit 6 || exit 1;; |
||||||
|
|
||||||
|
## Image |
||||||
|
image/*) |
||||||
|
local orientation |
||||||
|
orientation="$( identify -format '%[EXIF:Orientation]\n' -- "${FILE_PATH}" )" |
||||||
|
## If orientation data is present and the image actually |
||||||
|
## needs rotating ("1" means no rotation)... |
||||||
|
if [[ -n "$orientation" && "$orientation" != 1 ]]; then |
||||||
|
## ...auto-rotate the image according to the EXIF data. |
||||||
|
convert -- "${FILE_PATH}" -auto-orient "${IMAGE_CACHE_PATH}" && exit 6 |
||||||
|
fi |
||||||
|
|
||||||
|
## `w3mimgdisplay` will be called for all images (unless overriden |
||||||
|
## as above), but might fail for unsupported types. |
||||||
|
exit 7;; |
||||||
|
|
||||||
|
## Video |
||||||
|
# video/*) |
||||||
|
# # Thumbnail |
||||||
|
# ffmpegthumbnailer -i "${FILE_PATH}" -o "${IMAGE_CACHE_PATH}" -s 0 && exit 6 |
||||||
|
# exit 1;; |
||||||
|
|
||||||
|
## PDF |
||||||
|
# application/pdf) |
||||||
|
# pdftoppm -f 1 -l 1 \ |
||||||
|
# -scale-to-x "${DEFAULT_SIZE%x*}" \ |
||||||
|
# -scale-to-y -1 \ |
||||||
|
# -singlefile \ |
||||||
|
# -jpeg -tiffcompression jpeg \ |
||||||
|
# -- "${FILE_PATH}" "${IMAGE_CACHE_PATH%.*}" \ |
||||||
|
# && exit 6 || exit 1;; |
||||||
|
|
||||||
|
|
||||||
|
## ePub, MOBI, FB2 (using Calibre) |
||||||
|
# application/epub+zip|application/x-mobipocket-ebook|\ |
||||||
|
# application/x-fictionbook+xml) |
||||||
|
# # ePub (using https://github.com/marianosimone/epub-thumbnailer) |
||||||
|
# epub-thumbnailer "${FILE_PATH}" "${IMAGE_CACHE_PATH}" \ |
||||||
|
# "${DEFAULT_SIZE%x*}" && exit 6 |
||||||
|
# ebook-meta --get-cover="${IMAGE_CACHE_PATH}" -- "${FILE_PATH}" \ |
||||||
|
# >/dev/null && exit 6 |
||||||
|
# exit 1;; |
||||||
|
|
||||||
|
## Font |
||||||
|
application/font*|application/*opentype) |
||||||
|
preview_png="/tmp/$(basename "${IMAGE_CACHE_PATH%.*}").png" |
||||||
|
if fontimage -o "${preview_png}" \ |
||||||
|
--pixelsize "120" \ |
||||||
|
--fontname \ |
||||||
|
--pixelsize "80" \ |
||||||
|
--text " ABCDEFGHIJKLMNOPQRSTUVWXYZ " \ |
||||||
|
--text " abcdefghijklmnopqrstuvwxyz " \ |
||||||
|
--text " 0123456789.:,;(*!?') ff fl fi ffi ffl " \ |
||||||
|
--text " The quick brown fox jumps over the lazy dog. " \ |
||||||
|
"${FILE_PATH}"; |
||||||
|
then |
||||||
|
convert -- "${preview_png}" "${IMAGE_CACHE_PATH}" \ |
||||||
|
&& rm "${preview_png}" \ |
||||||
|
&& exit 6 |
||||||
|
else |
||||||
|
exit 1 |
||||||
|
fi |
||||||
|
;; |
||||||
|
|
||||||
|
## Preview archives using the first image inside. |
||||||
|
## (Very useful for comic book collections for example.) |
||||||
|
# application/zip|application/x-rar|application/x-7z-compressed|\ |
||||||
|
# application/x-xz|application/x-bzip2|application/x-gzip|application/x-tar) |
||||||
|
# local fn=""; local fe="" |
||||||
|
# local zip=""; local rar=""; local tar=""; local bsd="" |
||||||
|
# case "${mimetype}" in |
||||||
|
# application/zip) zip=1 ;; |
||||||
|
# application/x-rar) rar=1 ;; |
||||||
|
# application/x-7z-compressed) ;; |
||||||
|
# *) tar=1 ;; |
||||||
|
# esac |
||||||
|
# { [ "$tar" ] && fn=$(tar --list --file "${FILE_PATH}"); } || \ |
||||||
|
# { fn=$(bsdtar --list --file "${FILE_PATH}") && bsd=1 && tar=""; } || \ |
||||||
|
# { [ "$rar" ] && fn=$(unrar lb -p- -- "${FILE_PATH}"); } || \ |
||||||
|
# { [ "$zip" ] && fn=$(zipinfo -1 -- "${FILE_PATH}"); } || return |
||||||
|
# |
||||||
|
# fn=$(echo "$fn" | python -c "import sys; import mimetypes as m; \ |
||||||
|
# [ print(l, end='') for l in sys.stdin if \ |
||||||
|
# (m.guess_type(l[:-1])[0] or '').startswith('image/') ]" |\ |
||||||
|
# sort -V | head -n 1) |
||||||
|
# [ "$fn" = "" ] && return |
||||||
|
# [ "$bsd" ] && fn=$(printf '%b' "$fn") |
||||||
|
# |
||||||
|
# [ "$tar" ] && tar --extract --to-stdout \ |
||||||
|
# --file "${FILE_PATH}" -- "$fn" > "${IMAGE_CACHE_PATH}" && exit 6 |
||||||
|
# fe=$(echo -n "$fn" | sed 's/[][*?\]/\\\0/g') |
||||||
|
# [ "$bsd" ] && bsdtar --extract --to-stdout \ |
||||||
|
# --file "${FILE_PATH}" -- "$fe" > "${IMAGE_CACHE_PATH}" && exit 6 |
||||||
|
# [ "$bsd" ] || [ "$tar" ] && rm -- "${IMAGE_CACHE_PATH}" |
||||||
|
# [ "$rar" ] && unrar p -p- -inul -- "${FILE_PATH}" "$fn" > \ |
||||||
|
# "${IMAGE_CACHE_PATH}" && exit 6 |
||||||
|
# [ "$zip" ] && unzip -pP "" -- "${FILE_PATH}" "$fe" > \ |
||||||
|
# "${IMAGE_CACHE_PATH}" && exit 6 |
||||||
|
# [ "$rar" ] || [ "$zip" ] && rm -- "${IMAGE_CACHE_PATH}" |
||||||
|
# ;; |
||||||
|
esac |
||||||
|
|
||||||
|
# openscad_image() { |
||||||
|
# TMPPNG="$(mktemp -t XXXXXX.png)" |
||||||
|
# openscad --colorscheme="${OPENSCAD_COLORSCHEME}" \ |
||||||
|
# --imgsize="${OPENSCAD_IMGSIZE/x/,}" \ |
||||||
|
# -o "${TMPPNG}" "${1}" |
||||||
|
# mv "${TMPPNG}" "${IMAGE_CACHE_PATH}" |
||||||
|
# } |
||||||
|
|
||||||
|
# case "${FILE_EXTENSION_LOWER}" in |
||||||
|
# ## 3D models |
||||||
|
# ## OpenSCAD only supports png image output, and ${IMAGE_CACHE_PATH} |
||||||
|
# ## is hardcoded as jpeg. So we make a tempfile.png and just |
||||||
|
# ## move/rename it to jpg. This works because image libraries are |
||||||
|
# ## smart enough to handle it. |
||||||
|
# csg|scad) |
||||||
|
# openscad_image "${FILE_PATH}" && exit 6 |
||||||
|
# ;; |
||||||
|
# 3mf|amf|dxf|off|stl) |
||||||
|
# openscad_image <(echo "import(\"${FILE_PATH}\");") && exit 6 |
||||||
|
# ;; |
||||||
|
# esac |
||||||
|
} |
||||||
|
|
||||||
|
handle_mime() { |
||||||
|
local mimetype="${1}" |
||||||
|
case "${mimetype}" in |
||||||
|
## RTF and DOC |
||||||
|
text/rtf|*msword) |
||||||
|
## Preview as text conversion |
||||||
|
## note: catdoc does not always work for .doc files |
||||||
|
## catdoc: http://www.wagner.pp.ru/~vitus/software/catdoc/ |
||||||
|
catdoc -- "${FILE_PATH}" && exit 5 |
||||||
|
exit 1;; |
||||||
|
|
||||||
|
## DOCX, ePub, FB2 (using markdown) |
||||||
|
## You might want to remove "|epub" and/or "|fb2" below if you have |
||||||
|
## uncommented other methods to preview those formats |
||||||
|
*wordprocessingml.document|*/epub+zip|*/x-fictionbook+xml) |
||||||
|
## Preview as markdown conversion |
||||||
|
pandoc -s -t markdown -- "${FILE_PATH}" && exit 5 |
||||||
|
exit 1;; |
||||||
|
|
||||||
|
## XLS |
||||||
|
*ms-excel) |
||||||
|
## Preview as csv conversion |
||||||
|
## xls2csv comes with catdoc: |
||||||
|
## http://www.wagner.pp.ru/~vitus/software/catdoc/ |
||||||
|
xls2csv -- "${FILE_PATH}" && exit 5 |
||||||
|
exit 1;; |
||||||
|
|
||||||
|
## Text |
||||||
|
text/* | */xml) |
||||||
|
## Syntax highlight |
||||||
|
if [[ "$( stat --printf='%s' -- "${FILE_PATH}" )" -gt "${HIGHLIGHT_SIZE_MAX}" ]]; then |
||||||
|
exit 2 |
||||||
|
fi |
||||||
|
if [[ "$( tput colors )" -ge 256 ]]; then |
||||||
|
local pygmentize_format='terminal256' |
||||||
|
local highlight_format='xterm256' |
||||||
|
else |
||||||
|
local pygmentize_format='terminal' |
||||||
|
local highlight_format='ansi' |
||||||
|
fi |
||||||
|
env HIGHLIGHT_OPTIONS="${HIGHLIGHT_OPTIONS}" highlight \ |
||||||
|
--out-format="${highlight_format}" \ |
||||||
|
--force -- "${FILE_PATH}" && exit 5 |
||||||
|
env COLORTERM=8bit bat --color=always --style="plain" \ |
||||||
|
-- "${FILE_PATH}" && exit 5 |
||||||
|
pygmentize -f "${pygmentize_format}" -O "style=${PYGMENTIZE_STYLE}"\ |
||||||
|
-- "${FILE_PATH}" && exit 5 |
||||||
|
exit 2;; |
||||||
|
|
||||||
|
## DjVu |
||||||
|
image/vnd.djvu) |
||||||
|
## Preview as text conversion (requires djvulibre) |
||||||
|
djvutxt "${FILE_PATH}" | fmt -w "${PV_WIDTH}" && exit 5 |
||||||
|
exiftool "${FILE_PATH}" && exit 5 |
||||||
|
exit 1;; |
||||||
|
|
||||||
|
## Image |
||||||
|
image/*) |
||||||
|
## Preview as text conversion |
||||||
|
# img2txt --gamma=0.6 --width="${PV_WIDTH}" -- "${FILE_PATH}" && exit 4 |
||||||
|
exiftool "${FILE_PATH}" && exit 5 |
||||||
|
exit 1;; |
||||||
|
|
||||||
|
## Video and audio |
||||||
|
video/* | audio/*) |
||||||
|
mediainfo "${FILE_PATH}" && exit 5 |
||||||
|
exiftool "${FILE_PATH}" && exit 5 |
||||||
|
exit 1;; |
||||||
|
esac |
||||||
|
} |
||||||
|
|
||||||
|
handle_fallback() { |
||||||
|
echo '----- File Type Classification -----' && file --dereference --brief -- "${FILE_PATH}" && exit 5 |
||||||
|
exit 1 |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
MIMETYPE="$( file --dereference --brief --mime-type -- "${FILE_PATH}" )" |
||||||
|
if [[ "${PV_IMAGE_ENABLED}" == 'True' ]]; then |
||||||
|
handle_image "${MIMETYPE}" |
||||||
|
fi |
||||||
|
handle_extension |
||||||
|
handle_mime "${MIMETYPE}" |
||||||
|
handle_fallback |
||||||
|
|
||||||
|
exit 1 |
@ -0,0 +1,70 @@ |
|||||||
|
; Global settings for redshift |
||||||
|
[redshift] |
||||||
|
; Set the day and night screen temperatures |
||||||
|
temp-day=2600 |
||||||
|
temp-night=2400 |
||||||
|
|
||||||
|
; Disable the smooth fade between temperatures when Redshift starts and stops. |
||||||
|
; 0 will cause an immediate change between screen temperatures. |
||||||
|
; 1 will gradually apply the new screen temperature over a couple of seconds. |
||||||
|
fade=1 |
||||||
|
|
||||||
|
; Solar elevation thresholds. |
||||||
|
; By default, Redshift will use the current elevation of the sun to determine |
||||||
|
; whether it is daytime, night or in transition (dawn/dusk). When the sun is |
||||||
|
; above the degrees specified with elevation-high it is considered daytime and |
||||||
|
; below elevation-low it is considered night. |
||||||
|
;elevation-high=3 |
||||||
|
;elevation-low=-6 |
||||||
|
|
||||||
|
; Custom dawn/dusk intervals. |
||||||
|
; Instead of using the solar elevation, the time intervals of dawn and dusk |
||||||
|
; can be specified manually. The times must be specified as HH:MM in 24-hour |
||||||
|
; format. |
||||||
|
;dawn-time=6:00-7:45 |
||||||
|
;dusk-time=18:35-20:15 |
||||||
|
|
||||||
|
; Set the screen brightness. Default is 1.0. |
||||||
|
;brightness=0.9 |
||||||
|
; It is also possible to use different settings for day and night |
||||||
|
; since version 1.8. |
||||||
|
;brightness-day=0.7 |
||||||
|
;brightness-night=0.4 |
||||||
|
; Set the screen gamma (for all colors, or each color channel |
||||||
|
; individually) |
||||||
|
gamma=0.9 |
||||||
|
;gamma=0.8:0.7:0.8 |
||||||
|
; This can also be set individually for day and night since |
||||||
|
; version 1.10. |
||||||
|
;gamma-day=0.8:0.7:0.8 |
||||||
|
;gamma-night=0.6 |
||||||
|
|
||||||
|
; Set the location-provider: 'geoclue2', 'manual' |
||||||
|
; type 'redshift -l list' to see possible values. |
||||||
|
; The location provider settings are in a different section. |
||||||
|
location-provider=manual |
||||||
|
|
||||||
|
; Set the adjustment-method: 'randr', 'vidmode' |
||||||
|
; type 'redshift -m list' to see all possible values. |
||||||
|
; 'randr' is the preferred method, 'vidmode' is an older API. |
||||||
|
; but works in some cases when 'randr' does not. |
||||||
|
; The adjustment method settings are in a different section. |
||||||
|
adjustment-method=randr |
||||||
|
|
||||||
|
; Configuration of the location-provider: |
||||||
|
; type 'redshift -l PROVIDER:help' to see the settings. |
||||||
|
; ex: 'redshift -l manual:help' |
||||||
|
; Keep in mind that longitudes west of Greenwich (e.g. the Americas) |
||||||
|
; are negative numbers. |
||||||
|
[manual] |
||||||
|
lat=48.1 |
||||||
|
lon=11.6 |
||||||
|
|
||||||
|
; Configuration of the adjustment-method |
||||||
|
; type 'redshift -m METHOD:help' to see the settings. |
||||||
|
; ex: 'redshift -m randr:help' |
||||||
|
; In this example, randr is configured to adjust only screen 0. |
||||||
|
; Note that the numbering starts from 0, so this is actually the first screen. |
||||||
|
; If this option is not specified, Redshift will try to adjust _all_ screens. |
||||||
|
[randr] |
||||||
|
screen=0 |
@ -0,0 +1,70 @@ |
|||||||
|
; Global settings for redshift |
||||||
|
[redshift] |
||||||
|
; Set the day and night screen temperatures |
||||||
|
temp-day=2600 |
||||||
|
temp-night=2400 |
||||||
|
|
||||||
|
; Disable the smooth fade between temperatures when Redshift starts and stops. |
||||||
|
; 0 will cause an immediate change between screen temperatures. |
||||||
|
; 1 will gradually apply the new screen temperature over a couple of seconds. |
||||||
|
fade=1 |
||||||
|
|
||||||
|
; Solar elevation thresholds. |
||||||
|
; By default, Redshift will use the current elevation of the sun to determine |
||||||
|
; whether it is daytime, night or in transition (dawn/dusk). When the sun is |
||||||
|
; above the degrees specified with elevation-high it is considered daytime and |
||||||
|
; below elevation-low it is considered night. |
||||||
|
;elevation-high=3 |
||||||
|
;elevation-low=-6 |
||||||
|
|
||||||
|
; Custom dawn/dusk intervals. |
||||||
|
; Instead of using the solar elevation, the time intervals of dawn and dusk |
||||||
|
; can be specified manually. The times must be specified as HH:MM in 24-hour |
||||||
|
; format. |
||||||
|
;dawn-time=6:00-7:45 |
||||||
|
;dusk-time=18:35-20:15 |
||||||
|
|
||||||
|
; Set the screen brightness. Default is 1.0. |
||||||
|
;brightness=0.9 |
||||||
|
; It is also possible to use different settings for day and night |
||||||
|
; since version 1.8. |
||||||
|
;brightness-day=0.7 |
||||||
|
;brightness-night=0.4 |
||||||
|
; Set the screen gamma (for all colors, or each color channel |
||||||
|
; individually) |
||||||
|
gamma=0.9 |
||||||
|
;gamma=0.8:0.7:0.8 |
||||||
|
; This can also be set individually for day and night since |
||||||
|
; version 1.10. |
||||||
|
;gamma-day=0.8:0.7:0.8 |
||||||
|
;gamma-night=0.6 |
||||||
|
|
||||||
|
; Set the location-provider: 'geoclue2', 'manual' |
||||||
|
; type 'redshift -l list' to see possible values. |
||||||
|
; The location provider settings are in a different section. |
||||||
|
location-provider=manual |
||||||
|
|
||||||
|
; Set the adjustment-method: 'randr', 'vidmode' |
||||||
|
; type 'redshift -m list' to see all possible values. |
||||||
|
; 'randr' is the preferred method, 'vidmode' is an older API. |
||||||
|
; but works in some cases when 'randr' does not. |
||||||
|
; The adjustment method settings are in a different section. |
||||||
|
adjustment-method=randr |
||||||
|
|
||||||
|
; Configuration of the location-provider: |
||||||
|
; type 'redshift -l PROVIDER:help' to see the settings. |
||||||
|
; ex: 'redshift -l manual:help' |
||||||
|
; Keep in mind that longitudes west of Greenwich (e.g. the Americas) |
||||||
|
; are negative numbers. |
||||||
|
[manual] |
||||||
|
lat=48.1 |
||||||
|
lon=11.6 |
||||||
|
|
||||||
|
; Configuration of the adjustment-method |
||||||
|
; type 'redshift -m METHOD:help' to see the settings. |
||||||
|
; ex: 'redshift -m randr:help' |
||||||
|
; In this example, randr is configured to adjust only screen 0. |
||||||
|
; Note that the numbering starts from 0, so this is actually the first screen. |
||||||
|
; If this option is not specified, Redshift will try to adjust _all_ screens. |
||||||
|
[randr] |
||||||
|
screen=0 |
@ -0,0 +1,27 @@ |
|||||||
|
rofi.modi: window,run,ssh |
||||||
|
rofi.width: 50 |
||||||
|
rofi.lines: 15 |
||||||
|
rofi.columns: 1 |
||||||
|
rofi.font: roboto mono 10 |
||||||
|
rofi.color-normal: #0e4470, #9dd9df, #0e4470, #016694, #9dd9df |
||||||
|
rofi.color-urgent: #0e4470, #d6b48d, #22231D, #d6b48d, #9dd9df |
||||||
|
rofi.color-active: #0e4470, #2db1b9, #0e4470, #2db1b9, #0e4470 |
||||||
|
rofi.color-window: #0e4470, #016694, #014665 |
||||||
|
rofi.bw: 5 |
||||||
|
rofi.location: 0 |
||||||
|
rofi.padding: 5 |
||||||
|
rofi.yoffset: 0 |
||||||
|
rofi.xoffset: 0 |
||||||
|
rofi.fixed-num-lines: true |
||||||
|
rofi.terminal: rofi-sensible-terminal |
||||||
|
rofi.ssh-client: ssh |
||||||
|
rofi.ssh-command: {terminal} -e {ssh-client} {host} |
||||||
|
rofi.run-command: {cmd} |
||||||
|
rofi.parse-hosts: true |
||||||
|
rofi.matching: normal |
||||||
|
rofi.separator-style: none |
||||||
|
rofi.scrollbar-width: 0 |
||||||
|
rofi.kb-mode-next: Shift+Right,Control+Tab,Alt+l |
||||||
|
rofi.kb-mode-previous: Shift+Left,Control+Shift+Tab,Alt+h |
||||||
|
rofi.kb-row-up: Up,Control+p,Shift+Tab,Shift+ISO_Left_Tab,Alt+k |
||||||
|
rofi.kb-row-down: Down,Control+n,Alt+j |
@ -0,0 +1,122 @@ |
|||||||
|
# |
||||||
|
# wm independent hotkeys |
||||||
|
# |
||||||
|
|
||||||
|
# terminal emulator |
||||||
|
super + Return |
||||||
|
urxvt |
||||||
|
|
||||||
|
# program launcher |
||||||
|
super + d |
||||||
|
rofi -show run |
||||||
|
super + shift + d |
||||||
|
rofi -show drun |
||||||
|
# make sxhkd reload its configuration files: |
||||||
|
super + Escape |
||||||
|
pkill -USR1 -x sxhkd |
||||||
|
|
||||||
|
# |
||||||
|
# bspwm hotkeys |
||||||
|
# |
||||||
|
|
||||||
|
# quit/restart bspwm |
||||||
|
super + alt + {q,r} |
||||||
|
bspc {quit,wm -r} |
||||||
|
|
||||||
|
# close and kill |
||||||
|
super + {_,shift + }w |
||||||
|
bspc node -{c,k} |
||||||
|
|
||||||
|
# alternate between the tiled and monocle layout |
||||||
|
super + m |
||||||
|
bspc desktop -l next |
||||||
|
|
||||||
|
# send the newest marked node to the newest preselected node |
||||||
|
super + y |
||||||
|
bspc node newest.marked.local -n newest.!automatic.local |
||||||
|
|
||||||
|
# swap the current node and the biggest window |
||||||
|
super + g |
||||||
|
bspc node -s biggest.window |
||||||
|
|
||||||
|
# |
||||||
|
# state/flags |
||||||
|
# |
||||||
|
|
||||||
|
# set the window state |
||||||
|
super + {t,shift + t,s,f} |
||||||
|
bspc node -t {tiled,pseudo_tiled,floating,fullscreen} |
||||||
|
|
||||||
|
# set the node flags |
||||||
|
super + ctrl + {m,x,y,z} |
||||||
|
bspc node -g {marked,locked,sticky,private} |
||||||
|
|
||||||
|
# |
||||||
|
# focus/swap |
||||||
|
# |
||||||
|
|
||||||
|
# focus the node in the given direction |
||||||
|
super + {_,shift + }{h,j,k,l} |
||||||
|
bspc node -{f,s} {west,south,north,east} |
||||||
|
|
||||||
|
# focus the node for the given path jump |
||||||
|
super + {p,b,comma,period} |
||||||
|
bspc node -f @{parent,brother,first,second} |
||||||
|
|
||||||
|
# focus the next/previous window in the current desktop |
||||||
|
super + {_,shift + }c |
||||||
|
bspc node -f {next,prev}.local.!hidden.window |
||||||
|
|
||||||
|
# focus the next/previous desktop in the current monitor |
||||||
|
super + bracket{left,right} |
||||||
|
bspc desktop -f {prev,next}.local |
||||||
|
|
||||||
|
# focus the last node/desktop |
||||||
|
super + {grave,Tab} |
||||||
|
bspc {node,desktop} -f last |
||||||
|
|
||||||
|
# focus the older or newer node in the focus history |
||||||
|
super + {o,i} |
||||||
|
bspc wm -h off; \ |
||||||
|
bspc node {older,newer} -f; \ |
||||||
|
bspc wm -h on |
||||||
|
|
||||||
|
# focus or send to the given desktop |
||||||
|
super + {_,shift + }{1-9,0} |
||||||
|
bspc {desktop -f,node -d} '^{1-9,10}' |
||||||
|
|
||||||
|
# |
||||||
|
# preselect |
||||||
|
# |
||||||
|
|
||||||
|
# preselect the direction |
||||||
|
super + ctrl + {h,j,k,l} |
||||||
|
bspc node -p {west,south,north,east} |
||||||
|
|
||||||
|
# preselect the ratio |
||||||
|
super + ctrl + {1-9} |
||||||
|
bspc node -o 0.{1-9} |
||||||
|
|
||||||
|
# cancel the preselection for the focused node |
||||||
|
super + ctrl + space |
||||||
|
bspc node -p cancel |
||||||
|
|
||||||
|
# cancel the preselection for the focused desktop |
||||||
|
super + ctrl + shift + space |
||||||
|
bspc query -N -d | xargs -I id -n 1 bspc node id -p cancel |
||||||
|
|
||||||
|
# |
||||||
|
# move/resize |
||||||
|
# |
||||||
|
|
||||||
|
# expand a window by moving one of its side outward |
||||||
|
super + alt + {h,j,k,l} |
||||||
|
bspc node -z {left -20 0,bottom 0 20,top 0 -20,right 20 0} |
||||||
|
|
||||||
|
# contract a window by moving one of its side inward |
||||||
|
super + alt + shift + {h,j,k,l} |
||||||
|
bspc node -z {right -20 0,top 0 20,bottom 0 -20,left 20 0} |
||||||
|
|
||||||
|
# move a floating window |
||||||
|
super + {Left,Down,Up,Right} |
||||||
|
bspc node -v {-20 0,0 20,0 -20,20 0} |
@ -0,0 +1,33 @@ |
|||||||
|
#!/bin/sh |
||||||
|
while read file |
||||||
|
do |
||||||
|
case "$1" in |
||||||
|
"w") setbg "$file" & ;; |
||||||
|
"c") |
||||||
|
[ -z "$destdir" ] && destdir="$(sed "s/\s.*#.*$//;/^\s*$/d" ${XDG_CONFIG_HOME:-$HOME/.config}/shell/bm-dirs | awk '{print $2}' | dmenu -l 20 -i -p "Copy file(s) to where?" | sed "s|~|$HOME|g")" |
||||||
|
[ ! -d "$destdir" ] && notify-send "$destdir is not a directory, cancelled." && exit |
||||||
|
cp "$file" "$destdir" && notify-send -i "$(readlink -f "$file")" "$file copied to $destdir." & |
||||||
|
;; |
||||||
|
"m") |
||||||
|
[ -z "$destdir" ] && destdir="$(sed "s/\s.*#.*$//;/^\s*$/d" ${XDG_CONFIG_HOME:-$HOME/.config}/shell/bm-dirs | awk '{print $2}' | dmenu -l 20 -i -p "Move file(s) to where?" | sed "s|~|$HOME|g")" |
||||||
|
[ ! -d "$destdir" ] && notify-send "$destdir is not a directory, cancelled." && exit |
||||||
|
mv "$file" "$destdir" && notify-send -i "$(readlink -f "$file")" "$file moved to $destdir." & |
||||||
|
;; |
||||||
|
"r") |
||||||
|
convert -rotate 90 "$file" "$file" ;; |
||||||
|
"R") |
||||||
|
convert -rotate -90 "$file" "$file" ;; |
||||||
|
"f") |
||||||
|
convert -flop "$file" "$file" ;; |
||||||
|
"y") |
||||||
|
echo -n "$file" | tr -d '\n' | xclip -selection clipboard && |
||||||
|
notify-send "$file copied to clipboard" & ;; |
||||||
|
"Y") |
||||||
|
readlink -f "$file" | tr -d '\n' | xclip -selection clipboard && |
||||||
|
notify-send "$(readlink -f "$file") copied to clipboard" & ;; |
||||||
|
"d") |
||||||
|
[ "$(printf "No\\nYes" | dmenu -i -p "Really delete $file?")" = "Yes" ] && rm "$file" && notify-send "$file deleted." ;; |
||||||
|
"g") ifinstalled gimp && setsid -f gimp "$file" ;; |
||||||
|
"i") notify-send "File information" "$(mediainfo "$file")" ;; |
||||||
|
esac |
||||||
|
done |
@ -0,0 +1,15 @@ |
|||||||
|
set sandbox none |
||||||
|
set statusbar-h-padding 0 |
||||||
|
set statusbar-v-padding 0 |
||||||
|
set page-padding 1 |
||||||
|
set selection-clipboard clipboard |
||||||
|
map u scroll half-up |
||||||
|
map d scroll half-down |
||||||
|
map D toggle_page_mode |
||||||
|
map r reload |
||||||
|
map R rotate |
||||||
|
map K zoom in |
||||||
|
map J zoom out |
||||||
|
map i recolor |
||||||
|
map p print |
||||||
|
map g goto top |
Loading…
Reference in new issue