commit 3ebe3333f398c95d8e2294354555c8cd98743f13
parent 6cde150380210a0b6d9011f37971aca94973c1bb
Author: C. Beau Hilton <cbeauhilton@gmail.com>
Date: Wed, 2 Dec 2020 06:30:24 -0600
vimrc
Diffstat:
12 files changed, 1024 insertions(+), 1376 deletions(-)
diff --git a/.gitignore b/.gitignore
@@ -5,6 +5,8 @@ odrive/
gcloud/
pulse/
chromium/
+spotify/
+spicetify/
transmission/
coc/
Code/
diff --git a/configstore/update-notifier-npm.json b/configstore/update-notifier-npm.json
@@ -1,4 +1,10 @@
{
"optOut": false,
- "lastUpdateCheck": 1588593812780
+ "lastUpdateCheck": 1606900512049,
+ "update": {
+ "latest": "6.14.9",
+ "current": "6.14.8",
+ "type": "patch",
+ "name": "npm"
+ }
}
\ No newline at end of file
diff --git a/dconf/user b/dconf/user
Binary files differ.
diff --git a/htop/htoprc b/htop/htoprc
@@ -16,9 +16,12 @@ tree_view=0
header_margin=1
detailed_cpu_time=0
cpu_count_from_zero=0
+show_cpu_usage=1
+show_cpu_frequency=0
update_process_names=0
account_guest_in_cpu_meter=0
color_scheme=0
+enable_mouse=1
delay=15
left_meters=AllCPUs Memory Swap
left_meter_modes=1 1 1
diff --git a/kitty/kitty.conf b/kitty/kitty.conf
@@ -1,1048 +1,44 @@
# vim:fileencoding=utf-8:ft=conf:foldmethod=marker
-#: Fonts {{{
-
-#: kitty has very powerful font management. You can configure
-#: individual font faces and even specify special fonts for particular
-#: characters.
-
-font_family monospace
-bold_font auto
-italic_font auto
-bold_italic_font auto
-
-#: You can specify different fonts for the bold/italic/bold-italic
-#: variants. To get a full list of supported fonts use the `kitty
-#: list-fonts` command. By default they are derived automatically, by
-#: the OSes font system. Setting them manually is useful for font
-#: families that have many weight variants like Book, Medium, Thick,
-#: etc. For example::
-
-#: font_family Operator Mono Book
-#: bold_font Operator Mono Medium
-#: italic_font Operator Mono Book Italic
-#: bold_italic_font Operator Mono Medium Italic
-
-font_size 9.0
-
-#: Font size (in pts)
-
-force_ltr no
-
-#: kitty does not support BIDI (bidirectional text), however, for RTL
-#: scripts, words are automatically displayed in RTL. That is to say,
-#: in an RTL script, the words "HELLO WORLD" display in kitty as
-#: "WORLD HELLO", and if you try to select a substring of an RTL-
-#: shaped string, you will get the character that would be there had
-#: the the string been LTR. For example, assuming the Hebrew word
-#: ירושלים, selecting the character that on the screen appears to be ם
-#: actually writes into the selection buffer the character י.
-
-#: kitty's default behavior is useful in conjunction with a filter to
-#: reverse the word order, however, if you wish to manipulate RTL
-#: glyphs, it can be very challenging to work with, so this option is
-#: provided to turn it off. Furthermore, this option can be used with
-#: the command line program GNU FriBidi
-#: <https://github.com/fribidi/fribidi#executable> to get BIDI
-#: support, because it will force kitty to always treat the text as
-#: LTR, which FriBidi expects for terminals.
-
-adjust_line_height 0
-adjust_column_width 0
-
-#: Change the size of each character cell kitty renders. You can use
-#: either numbers, which are interpreted as pixels or percentages
-#: (number followed by %), which are interpreted as percentages of the
-#: unmodified values. You can use negative pixels or percentages less
-#: than 100% to reduce sizes (but this might cause rendering
-#: artifacts).
-
-# symbol_map U+E0A0-U+E0A3,U+E0C0-U+E0C7 PowerlineSymbols
-
-#: Map the specified unicode codepoints to a particular font. Useful
-#: if you need special rendering for some symbols, such as for
-#: Powerline. Avoids the need for patched fonts. Each unicode code
-#: point is specified in the form U+<code point in hexadecimal>. You
-#: can specify multiple code points, separated by commas and ranges
-#: separated by hyphens. symbol_map itself can be specified multiple
-#: times. Syntax is::
-
-#: symbol_map codepoints Font Family Name
-
-disable_ligatures never
-
-#: Choose how you want to handle multi-character ligatures. The
-#: default is to always render them. You can tell kitty to not render
-#: them when the cursor is over them by using cursor to make editing
-#: easier, or have kitty never render them at all by using always, if
-#: you don't like them. The ligature strategy can be set per-window
-#: either using the kitty remote control facility or by defining
-#: shortcuts for it in kitty.conf, for example::
-
-#: map alt+1 disable_ligatures_in active always
-#: map alt+2 disable_ligatures_in all never
-#: map alt+3 disable_ligatures_in tab cursor
-
-#: Note that this refers to programming ligatures, typically
-#: implemented using the calt OpenType feature. For disabling general
-#: ligatures, use the font_features setting.
-
-font_features none
-
-#: Choose exactly which OpenType features to enable or disable. This
-#: is useful as some fonts might have features worthwhile in a
-#: terminal. For example, Fira Code Retina includes a discretionary
-#: feature, zero, which in that font changes the appearance of the
-#: zero (0), to make it more easily distinguishable from Ø. Fira Code
-#: Retina also includes other discretionary features known as
-#: Stylistic Sets which have the tags ss01 through ss20.
-
-#: Note that this code is indexed by PostScript name, and not the font
-#: family. This allows you to define very precise feature settings;
-#: e.g. you can disable a feature in the italic font but not in the
-#: regular font.
-
-#: To get the PostScript name for a font, use kitty + list-fonts
-#: --psnames:
-
-#: .. code-block:: sh
-
-#: $ kitty + list-fonts --psnames | grep Fira
-#: Fira Code
-#: Fira Code Bold (FiraCode-Bold)
-#: Fira Code Light (FiraCode-Light)
-#: Fira Code Medium (FiraCode-Medium)
-#: Fira Code Regular (FiraCode-Regular)
-#: Fira Code Retina (FiraCode-Retina)
-
-#: The part in brackets is the PostScript name.
-
-#: Enable alternate zero and oldstyle numerals::
-
-#: font_features FiraCode-Retina +zero +onum
-
-#: Enable only alternate zero::
-
-#: font_features FiraCode-Retina +zero
-
-#: Disable the normal ligatures, but keep the calt feature which (in
-#: this font) breaks up monotony::
-
-#: font_features TT2020StyleB-Regular -liga +calt
-
-#: In conjunction with force_ltr, you may want to disable Arabic
-#: shaping entirely, and only look at their isolated forms if they
-#: show up in a document. You can do this with e.g.::
-
-#: font_features UnifontMedium +isol -medi -fina -init
-
-box_drawing_scale 0.001, 1, 1.5, 2
-
-#: Change the sizes of the lines used for the box drawing unicode
-#: characters These values are in pts. They will be scaled by the
-#: monitor DPI to arrive at a pixel value. There must be four values
-#: corresponding to thin, normal, thick, and very thick lines.
-
-#: }}}
-
-#: Cursor customization {{{
-
-cursor #cccccc
-
-#: Default cursor color
-
-cursor_text_color #111111
-
-#: Choose the color of text under the cursor. If you want it rendered
-#: with the background color of the cell underneath instead, use the
-#: special keyword: background
-
-cursor_shape block
-
-#: The cursor shape can be one of (block, beam, underline)
-
-cursor_beam_thickness 1.5
-
-#: Defines the thickness of the beam cursor (in pts)
-
-cursor_underline_thickness 2.0
-
-#: Defines the thickness of the underline cursor (in pts)
-
-cursor_blink_interval -1
-
-#: The interval (in seconds) at which to blink the cursor. Set to zero
-#: to disable blinking. Negative values mean use system default. Note
-#: that numbers smaller than repaint_delay will be limited to
-#: repaint_delay.
-
-cursor_stop_blinking_after 15.0
-
-#: Stop blinking cursor after the specified number of seconds of
-#: keyboard inactivity. Set to zero to never stop blinking.
-
-#: }}}
-
-#: Scrollback {{{
-
-scrollback_lines 2000
-
-#: Number of lines of history to keep in memory for scrolling back.
-#: Memory is allocated on demand. Negative numbers are (effectively)
-#: infinite scrollback. Note that using very large scrollback is not
-#: recommended as it can slow down performance of the terminal and
-#: also use large amounts of RAM. Instead, consider using
-#: scrollback_pager_history_size.
-
-scrollback_pager less --chop-long-lines --RAW-CONTROL-CHARS +INPUT_LINE_NUMBER
-
-#: Program with which to view scrollback in a new window. The
-#: scrollback buffer is passed as STDIN to this program. If you change
-#: it, make sure the program you use can handle ANSI escape sequences
-#: for colors and text formatting. INPUT_LINE_NUMBER in the command
-#: line above will be replaced by an integer representing which line
-#: should be at the top of the screen. Similarly CURSOR_LINE and
-#: CURSOR_COLUMN will be replaced by the current cursor position.
-
-scrollback_pager_history_size 4000
-
-#: Separate scrollback history size, used only for browsing the
-#: scrollback buffer (in MB). This separate buffer is not available
-#: for interactive scrolling but will be piped to the pager program
-#: when viewing scrollback buffer in a separate window. The current
-#: implementation stores the data in UTF-8, so approximatively 10000
-#: lines per megabyte at 100 chars per line, for pure ASCII text,
-#: unformatted text. A value of zero or less disables this feature.
-#: The maximum allowed size is 4GB.
-
-wheel_scroll_multiplier 5.0
-
-#: Modify the amount scrolled by the mouse wheel. Note this is only
-#: used for low precision scrolling devices, not for high precision
-#: scrolling on platforms such as macOS and Wayland. Use negative
-#: numbers to change scroll direction.
-
-touch_scroll_multiplier 1.0
-
-#: Modify the amount scrolled by a touchpad. Note this is only used
-#: for high precision scrolling devices on platforms such as macOS and
-#: Wayland. Use negative numbers to change scroll direction.
-
-#: }}}
-
-#: Mouse {{{
-
-mouse_hide_wait 3.0
-
-#: Hide mouse cursor after the specified number of seconds of the
-#: mouse not being used. Set to zero to disable mouse cursor hiding.
-#: Set to a negative value to hide the mouse cursor immediately when
-#: typing text. Disabled by default on macOS as getting it to work
-#: robustly with the ever-changing sea of bugs that is Cocoa is too
-#: much effort.
-
-url_color #0087bd
-url_style curly
-
-#: The color and style for highlighting URLs on mouse-over. url_style
-#: can be one of: none, single, double, curly
-
-open_url_modifiers kitty_mod
-
-#: The modifier keys to press when clicking with the mouse on URLs to
-#: open the URL
-
-open_url_with default
-
-#: The program with which to open URLs that are clicked on. The
-#: special value default means to use the operating system's default
-#: URL handler.
-
-url_prefixes http https file ftp
-
-#: The set of URL prefixes to look for when detecting a URL under the
-#: mouse cursor.
-
-detect_urls yes
-
-#: Detect URLs under the mouse. Detected URLs are highlighted with an
-#: underline and the mouse cursor becomes a hand over them. Even if
-#: this option is disabled, URLs are still clickable.
-
-copy_on_select no
-
-#: Copy to clipboard or a private buffer on select. With this set to
-#: clipboard, simply selecting text with the mouse will cause the text
-#: to be copied to clipboard. Useful on platforms such as macOS that
-#: do not have the concept of primary selections. You can instead
-#: specify a name such as a1 to copy to a private kitty buffer
-#: instead. Map a shortcut with the paste_from_buffer action to paste
-#: from this private buffer. For example::
-
-#: map cmd+shift+v paste_from_buffer a1
-
-#: Note that copying to the clipboard is a security risk, as all
-#: programs, including websites open in your browser can read the
-#: contents of the system clipboard.
-
-strip_trailing_spaces never
-
-#: Remove spaces at the end of lines when copying to clipboard. A
-#: value of smart will do it when using normal selections, but not
-#: rectangle selections. always will always do it.
-
-rectangle_select_modifiers ctrl+alt
-
-#: The modifiers to use rectangular selection (i.e. to select text in
-#: a rectangular block with the mouse)
-
-terminal_select_modifiers shift
-
-#: The modifiers to override mouse selection even when a terminal
-#: application has grabbed the mouse
-
-select_by_word_characters @-./_~?&=%+#
-
-#: Characters considered part of a word when double clicking. In
-#: addition to these characters any character that is marked as an
-#: alphanumeric character in the unicode database will be matched.
-
-click_interval -1.0
-
-#: The interval between successive clicks to detect double/triple
-#: clicks (in seconds). Negative numbers will use the system default
-#: instead, if available, or fallback to 0.5.
-
-focus_follows_mouse no
-
-#: Set the active window to the window under the mouse when moving the
-#: mouse around
-
-pointer_shape_when_grabbed arrow
-
-#: The shape of the mouse pointer when the program running in the
-#: terminal grabs the mouse. Valid values are: arrow, beam and hand
-
-default_pointer_shape beam
-
-#: The default shape of the mouse pointer. Valid values are: arrow,
-#: beam and hand
-
-pointer_shape_when_dragging beam
-
-#: The default shape of the mouse pointer when dragging across text.
-#: Valid values are: arrow, beam and hand
-
-#: }}}
-
-#: Performance tuning {{{
-
-repaint_delay 10
-
-#: Delay (in milliseconds) between screen updates. Decreasing it,
-#: increases frames-per-second (FPS) at the cost of more CPU usage.
-#: The default value yields ~100 FPS which is more than sufficient for
-#: most uses. Note that to actually achieve 100 FPS you have to either
-#: set sync_to_monitor to no or use a monitor with a high refresh
-#: rate. Also, to minimize latency when there is pending input to be
-#: processed, repaint_delay is ignored.
-
-input_delay 3
-
-#: Delay (in milliseconds) before input from the program running in
-#: the terminal is processed. Note that decreasing it will increase
-#: responsiveness, but also increase CPU usage and might cause flicker
-#: in full screen programs that redraw the entire screen on each loop,
-#: because kitty is so fast that partial screen updates will be drawn.
-
-sync_to_monitor yes
-
-#: Sync screen updates to the refresh rate of the monitor. This
-#: prevents tearing (https://en.wikipedia.org/wiki/Screen_tearing)
-#: when scrolling. However, it limits the rendering speed to the
-#: refresh rate of your monitor. With a very high speed mouse/high
-#: keyboard repeat rate, you may notice some slight input latency. If
-#: so, set this to no.
-
-#: }}}
-
-#: Terminal bell {{{
+font_family monospace
+bold_font auto
+italic_font auto
+bold_italic_font auto
+font_size 9.0
+
+window_border_width 0.5pt
+draw_minimal_borders yes
+window_margin_width 0
+single_window_margin_width -1
+window_padding_width 3 3
+placement_strategy center
enable_audio_bell no
-
-#: Enable/disable the audio bell. Useful in environments that require
-#: silence.
-
visual_bell_duration 0.0
-#: Visual bell duration. Flash the screen when a bell occurs for the
-#: specified number of seconds. Set to zero to disable.
-
-window_alert_on_bell yes
-
-#: Request window attention on bell. Makes the dock icon bounce on
-#: macOS or the taskbar flash on linux.
-
-bell_on_tab yes
-
-#: Show a bell symbol on the tab if a bell occurs in one of the
-#: windows in the tab and the window is not the currently focused
-#: window
-
-command_on_bell none
-
-#: Program to run when a bell occurs.
-
-#: }}}
-
-#: Window layout {{{
-
-remember_window_size yes
-initial_window_width 640
-initial_window_height 400
-
-#: If enabled, the window size will be remembered so that new
-#: instances of kitty will have the same size as the previous
-#: instance. If disabled, the window will initially have size
-#: configured by initial_window_width/height, in pixels. You can use a
-#: suffix of "c" on the width/height values to have them interpreted
-#: as number of cells instead of pixels.
-
-enabled_layouts *
-
-#: The enabled window layouts. A comma separated list of layout names.
-#: The special value all means all layouts. The first listed layout
-#: will be used as the startup layout. Default configuration is all
-#: layouts in alphabetical order. For a list of available layouts, see
-#: the https://sw.kovidgoyal.net/kitty/index.html#layouts.
-
-window_resize_step_cells 2
-window_resize_step_lines 2
-
-#: The step size (in units of cell width/cell height) to use when
-#: resizing windows. The cells value is used for horizontal resizing
-#: and the lines value for vertical resizing.
-
-window_border_width 0.5pt
-
-#: The width of window borders. Can be either in pixels (px) or pts
-#: (pt). Values in pts will be rounded to the nearest number of pixels
-#: based on screen resolution. If not specified the unit is assumed to
-#: be pts. Note that borders are displayed only when more than one
-#: window is visible. They are meant to separate multiple windows.
-
-draw_minimal_borders yes
-
-#: Draw only the minimum borders needed. This means that only the
-#: minimum needed borders for inactive windows are drawn. That is only
-#: the borders that separate the inactive window from a neighbor. Note
-#: that setting a non-zero window margin overrides this and causes all
-#: borders to be drawn.
-
-window_margin_width 0
-
-#: The window margin (in pts) (blank area outside the border). A
-#: single value sets all four sides. Two values set the vertical and
-#: horizontal sides. Three values set top, horizontal and bottom. Four
-#: values set top, right, bottom and left.
-
-single_window_margin_width -1
-
-#: The window margin (in pts) to use when only a single window is
-#: visible. Negative values will cause the value of
-#: window_margin_width to be used instead. A single value sets all
-#: four sides. Two values set the vertical and horizontal sides. Three
-#: values set top, horizontal and bottom. Four values set top, right,
-#: bottom and left.
-
-window_padding_width 3 3
-
-#: The window padding (in pts) (blank area between the text and the
-#: window border). A single value sets all four sides. Two values set
-#: the vertical and horizontal sides. Three values set top, horizontal
-#: and bottom. Four values set top, right, bottom and left.
-
-placement_strategy center
-
-#: When the window size is not an exact multiple of the cell size, the
-#: cell area of the terminal window will have some extra padding on
-#: the sides. You can control how that padding is distributed with
-#: this option. Using a value of center means the cell area will be
-#: placed centrally. A value of top-left means the padding will be on
-#: only the bottom and right edges.
-
-active_border_color #00ff00
-
-#: The color for the border of the active window. Set this to none to
-#: not draw borders around the active window.
-
-inactive_border_color #cccccc
-
-#: The color for the border of inactive windows
-
-bell_border_color #ff5a00
-
-#: The color for the border of inactive windows in which a bell has
-#: occurred
-
-inactive_text_alpha 0.9
-
-#: Fade the text in inactive windows by the specified amount (a number
-#: between zero and one, with zero being fully faded).
-
-hide_window_decorations no
-
-#: Hide the window decorations (title-bar and window borders) with
-#: yes. On macOS, titlebar-only can be used to only hide the titlebar.
-#: Whether this works and exactly what effect it has depends on the
-#: window manager/operating system.
-
-resize_debounce_time 0.1
-
-#: The time (in seconds) to wait before redrawing the screen when a
-#: resize event is received. On platforms such as macOS, where the
-#: operating system sends events corresponding to the start and end of
-#: a resize, this number is ignored.
-
-resize_draw_strategy static
-
-#: Choose how kitty draws a window while a resize is in progress. A
-#: value of static means draw the current window contents, mostly
-#: unchanged. A value of scale means draw the current window contents
-#: scaled. A value of blank means draw a blank window. A value of size
-#: means show the window size in cells.
-
-resize_in_steps no
-
-#: Resize the OS window in steps as large as the cells, instead of
-#: with the usual pixel accuracy. Combined with an
-#: initial_window_width and initial_window_height in number of cells,
-#: this option can be used to keep the margins as small as possible
-#: when resizing the OS window. Note that this does not currently work
-#: on Wayland.
-
-confirm_os_window_close 0
-
-#: Ask for confirmation when closing an OS window or a tab that has at
-#: least this number of kitty windows in it. A value of zero disables
-#: confirmation. This confirmation also applies to requests to quit
-#: the entire application (all OS windows, via the quit action).
-
-#: }}}
-
-#: Tab bar {{{
-
-tab_bar_edge bottom
-
-#: Which edge to show the tab bar on, top or bottom
-
-tab_bar_margin_width 0.0
-
-#: The margin to the left and right of the tab bar (in pts)
-
-tab_bar_style fade
-
-#: The tab bar style, can be one of: fade, separator, powerline, or
-#: hidden. In the fade style, each tab's edges fade into the
-#: background color, in the separator style, tabs are separated by a
-#: configurable separator, and the powerline shows the tabs as a
-#: continuous line. If you use the hidden style, you might want to
-#: create a mapping for the select_tab action which presents you with
-#: a list of tabs and allows for easy switching to a tab.
-
-tab_bar_min_tabs 2
-
-#: The minimum number of tabs that must exist before the tab bar is
-#: shown
-
-tab_switch_strategy previous
-
-#: The algorithm to use when switching to a tab when the current tab
-#: is closed. The default of previous will switch to the last used
-#: tab. A value of left will switch to the tab to the left of the
-#: closed tab. A value of last will switch to the right-most tab.
-
-tab_fade 0.25 0.5 0.75 1
-
-#: Control how each tab fades into the background when using fade for
-#: the tab_bar_style. Each number is an alpha (between zero and one)
-#: that controls how much the corresponding cell fades into the
-#: background, with zero being no fade and one being full fade. You
-#: can change the number of cells used by adding/removing entries to
-#: this list.
-
-tab_separator " ┇"
-
-#: The separator between tabs in the tab bar when using separator as
-#: the tab_bar_style.
-
-tab_activity_symbol none
-
-#: Some text or a unicode symbol to show on the tab if a window in the
-#: tab that does not have focus has some activity.
-
-tab_title_template "{title}"
-
-#: A template to render the tab title. The default just renders the
-#: title. If you wish to include the tab-index as well, use something
-#: like: {index}: {title}. Useful if you have shortcuts mapped for
-#: goto_tab N. In addition you can use {layout_name} for the current
-#: layout name and {num_windows} for the number of windows in the tab.
-#: Note that formatting is done by Python's string formatting
-#: machinery, so you can use, for instance, {layout_name[:2].upper()}
-#: to show only the first two letters of the layout name, upper-cased.
-
-active_tab_title_template none
-
-#: Template to use for active tabs, if not specified falls back to
-#: tab_title_template.
-# active_tab_foreground #000
-# active_tab_background #eee
-# active_tab_font_style bold-italic
-# inactive_tab_foreground #444
-# inactive_tab_background #999
-# inactive_tab_font_style normal
-#: Tab bar colors and styles
-# tab_bar_background none
-#: Background color for the tab bar. Defaults to using the terminal
-#: background color.
-#: }}}
-#: Color scheme {{{
-# foreground #dddddd
-# background #000000
-#: The foreground and background colors
-
-background_opacity 1
-
-#: The opacity of the background. A number between 0 and 1, where 1 is
-#: opaque and 0 is fully transparent. This will only work if
-#: supported by the OS (for instance, when using a compositor under
-#: X11). Note that it only sets the background color's opacity in
-#: cells that have the same background color as the default terminal
-#: background. This is so that things like the status bar in vim,
-#: powerline prompts, etc. still look good. But it means that if you
-#: use a color theme with a background color in your editor, it will
-#: not be rendered as transparent. Instead you should change the
-#: default background color in your kitty config and not use a
-#: background color in the editor color scheme. Or use the escape
-#: codes to set the terminals default colors in a shell script to
-#: launch your editor. Be aware that using a value less than 1.0 is a
-#: (possibly significant) performance hit. If you want to dynamically
-#: change transparency of windows set dynamic_background_opacity to
-#: yes (this is off by default as it has a performance cost)
-
-background_image none
-
-#: Path to a background image. Must be in PNG format.
-
-background_image_layout tiled
-
-#: Whether to tile or scale the background image.
-
-background_image_linear no
-
-#: When background image is scaled, whether linear interpolation
-#: should be used.
-
dynamic_background_opacity no
-
-#: Allow changing of the background_opacity dynamically, using either
-#: keyboard shortcuts (increase_background_opacity and
-#: decrease_background_opacity) or the remote control facility.
-
-background_tint 0.0
-
-#: How much to tint the background image by the background color. The
-#: tint is applied only under the text area, not margin/borders. Makes
-#: it easier to read the text. Tinting is done using the current
-#: background color for each window. This setting applies only if
-#: background_opacity is set and transparent windows are supported or
-#: background_image is set.
-
+inactive_text_alpha 0.9
dim_opacity 0.75
-#: How much to dim text that has the DIM/FAINT attribute set. One
-#: means no dimming and zero means fully dimmed (i.e. invisible).
-
-selection_foreground #000000
-
-#: The foreground for text selected with the mouse. A value of none
-#: means to leave the color unchanged.
-
-selection_background #fffacd
-
-#: The background for text selected with the mouse.
-
-
-#: The 16 terminal colors. There are 8 basic colors, each color has a
-#: dull and bright version. You can also set the remaining colors from
-#: the 256 color table as color16 to color255.
-
-color0 #000000
-color8 #767676
+mouse_hide_wait -1
-#: black
-
-color1 #cc0403
-color9 #f2201f
-
-#: red
-
-color2 #19cb00
-color10 #23fd00
-
-#: green
-
-color3 #cecb00
-color11 #fffd00
-
-#: yellow
-
-color4 #0d73cc
-color12 #1a8fff
-
-#: blue
-
-color5 #cb1ed1
-color13 #fd28ff
-
-#: magenta
-
-color6 #0dcdcd
-color14 #14ffff
-
-#: cyan
-
-color7 #dddddd
-color15 #ffffff
-
-#: white
-
-mark1_foreground black
-
-#: Color for marks of type 1
-
-mark1_background #98d3cb
-
-#: Color for marks of type 1 (light steel blue)
-
-mark2_foreground black
-
-#: Color for marks of type 2
-
-mark2_background #f2dcd3
-
-#: Color for marks of type 1 (beige)
-
-mark3_foreground black
-
-#: Color for marks of type 3
-
-mark3_background #f274bc
-
-#: Color for marks of type 1 (violet)
-
-#: }}}
-
-#: Advanced {{{
-
-shell .
-
-#: The shell program to execute. The default value of . means to use
-#: whatever shell is set as the default shell for the current user.
-#: Note that on macOS if you change this, you might need to add
-#: --login to ensure that the shell starts in interactive mode and
-#: reads its startup rc files.
-
-editor .
-
-#: The console editor to use when editing the kitty config file or
-#: similar tasks. A value of . means to use the environment variables
-#: VISUAL and EDITOR in that order. Note that this environment
-#: variable has to be set not just in your shell startup scripts but
-#: system-wide, otherwise kitty will not see it.
-
-close_on_child_death no
-
-#: Close the window when the child process (shell) exits. If no (the
-#: default), the terminal will remain open when the child exits as
-#: long as there are still processes outputting to the terminal (for
-#: example disowned or backgrounded processes). If yes, the window
-#: will close as soon as the child process exits. Note that setting it
-#: to yes means that any background processes still using the terminal
-#: can fail silently because their stdout/stderr/stdin no longer work.
-
-allow_remote_control no
-
-#: Allow other programs to control kitty. If you turn this on other
-#: programs can control all aspects of kitty, including sending text
-#: to kitty windows, opening new windows, closing windows, reading the
-#: content of windows, etc. Note that this even works over ssh
-#: connections. You can chose to either allow any program running
-#: within kitty to control it, with yes or only programs that connect
-#: to the socket specified with the kitty --listen-on command line
-#: option, if you use the value socket-only. The latter is useful if
-#: you want to prevent programs running on a remote computer over ssh
-#: from controlling kitty.
-
-listen_on none
-
-#: Tell kitty to listen to the specified unix/tcp socket for remote
-#: control connections. Note that this will apply to all kitty
-#: instances. It can be overridden by the kitty --listen-on command
-#: line flag. This option accepts only UNIX sockets, such as
-#: unix:${TEMP}/mykitty or (on Linux) unix:@mykitty. Environment
-#: variables are expanded. If {kitty_pid} is present then it is
-#: replaced by the PID of the kitty process, otherwise the PID of the
-#: kitty process is appended to the value, with a hyphen. This option
-#: is ignored unless you also set allow_remote_control to enable
-#: remote control. See the help for kitty --listen-on for more
-#: details.
-
-# env
-
-#: Specify environment variables to set in all child processes. Note
-#: that environment variables are expanded recursively, so if you
-#: use::
-
-#: env MYVAR1=a
-#: env MYVAR2=${MYVAR1}/${HOME}/b
-
-#: The value of MYVAR2 will be a/<path to home directory>/b.
-
-update_check_interval 24
-
-#: Periodically check if an update to kitty is available. If an update
-#: is found a system notification is displayed informing you of the
-#: available update. The default is to check every 24 hrs, set to zero
-#: to disable.
-
-startup_session none
-
-#: Path to a session file to use for all kitty instances. Can be
-#: overridden by using the kitty --session command line option for
-#: individual instances. See
-#: https://sw.kovidgoyal.net/kitty/index.html#sessions in the kitty
-#: documentation for details. Note that relative paths are interpreted
-#: with respect to the kitty config directory. Environment variables
-#: in the path are expanded.
-
-clipboard_control write-clipboard write-primary
-
-#: Allow programs running in kitty to read and write from the
-#: clipboard. You can control exactly which actions are allowed. The
-#: set of possible actions is: write-clipboard read-clipboard write-
-#: primary read-primary. You can additionally specify no-append to
-#: disable kitty's protocol extension for clipboard concatenation. The
-#: default is to allow writing to the clipboard and primary selection
-#: with concatenation enabled. Note that enabling the read
-#: functionality is a security risk as it means that any program, even
-#: one running on a remote server via SSH can read your clipboard.
-
-allow_hyperlinks yes
-
-#: Process hyperlink (OSC 8) escape sequences. If disabled OSC 8
-#: escape sequences are ignored. Otherwise they become clickable
-#: links, that you can click by holding down ctrl+shift and clicking
-#: with the mouse. The special value of ``ask`` means that kitty will
-#: ask before opening the link.
-
-term xterm-kitty
-
-#: The value of the TERM environment variable to set. Changing this
-#: can break many terminal programs, only change it if you know what
-#: you are doing, not because you read some advice on Stack Overflow
-#: to change it. The TERM variable is used by various programs to get
-#: information about the capabilities and behavior of the terminal. If
-#: you change it, depending on what programs you run, and how
-#: different the terminal you are changing it to is, various things
-#: from key-presses, to colors, to various advanced features may not
-#: work.
-
-#: }}}
-
-#: OS specific tweaks {{{
-
-macos_titlebar_color system
-
-#: Change the color of the kitty window's titlebar on macOS. A value
-#: of system means to use the default system color, a value of
-#: background means to use the background color of the currently
-#: active window and finally you can use an arbitrary color, such as
-#: #12af59 or red. WARNING: This option works by using a hack, as
-#: there is no proper Cocoa API for it. It sets the background color
-#: of the entire window and makes the titlebar transparent. As such it
-#: is incompatible with background_opacity. If you want to use both,
-#: you are probably better off just hiding the titlebar with
-#: hide_window_decorations.
-
-macos_option_as_alt no
-
-#: Use the option key as an alt key. With this set to no, kitty will
-#: use the macOS native Option+Key = unicode character behavior. This
-#: will break any Alt+key keyboard shortcuts in your terminal
-#: programs, but you can use the macOS unicode input technique. You
-#: can use the values: left, right, or both to use only the left,
-#: right or both Option keys as Alt, instead.
-
-macos_hide_from_tasks no
-
-#: Hide the kitty window from running tasks (Option+Tab) on macOS.
-
-macos_quit_when_last_window_closed no
-
-#: Have kitty quit when all the top-level windows are closed. By
-#: default, kitty will stay running, even with no open windows, as is
-#: the expected behavior on macOS.
-
-macos_window_resizable yes
-
-#: Disable this if you want kitty top-level (OS) windows to not be
-#: resizable on macOS.
-
-macos_thicken_font 0
-
-#: Draw an extra border around the font with the given width, to
-#: increase legibility at small font sizes. For example, a value of
-#: 0.75 will result in rendering that looks similar to sub-pixel
-#: antialiasing at common font sizes.
-
-macos_traditional_fullscreen no
-
-#: Use the traditional full-screen transition, that is faster, but
-#: less pretty.
-
-macos_show_window_title_in all
-
-#: Show or hide the window title in the macOS window or menu-bar. A
-#: value of window will show the title of the currently active window
-#: at the top of the macOS window. A value of menubar will show the
-#: title of the currently active window in the macOS menu-bar, making
-#: use of otherwise wasted space. all will show the title everywhere
-#: and none hides the title in the window and the menu-bar.
-
-macos_custom_beam_cursor no
-
-#: Enable/disable custom mouse cursor for macOS that is easier to see
-#: on both light and dark backgrounds. WARNING: this might make your
-#: mouse cursor invisible on dual GPU machines.
-
-linux_display_server auto
-
-#: Choose between Wayland and X11 backends. By default, an appropriate
-#: backend based on the system state is chosen automatically. Set it
-#: to x11 or wayland to force the choice.
-
-#: }}}
-
-#: Keyboard shortcuts {{{
-
-#: For a list of key names, see: the GLFW key macros
-#: <https://github.com/kovidgoyal/kitty/blob/master/glfw/glfw3.h#L349>.
-#: The name to use is the part after the GLFW_KEY_ prefix. For a list
-#: of modifier names, see: GLFW mods
-#: <https://www.glfw.org/docs/latest/group__mods.html>
-
-#: On Linux you can also use XKB key names to bind keys that are not
-#: supported by GLFW. See XKB keys
-#: <https://github.com/xkbcommon/libxkbcommon/blob/master/xkbcommon/xkbcommon-
-#: keysyms.h> for a list of key names. The name to use is the part
-#: after the XKB_KEY_ prefix. Note that you can only use an XKB key
-#: name for keys that are not known as GLFW keys.
-
-#: Finally, you can use raw system key codes to map keys, again only
-#: for keys that are not known as GLFW keys. To see the system key
-#: code for a key, start kitty with the kitty --debug-keyboard option.
-#: Then kitty will output some debug text for every key event. In that
-#: text look for ``native_code`` the value of that becomes the key
-#: name in the shortcut. For example:
-
-#: .. code-block:: none
-
-#: on_key_input: glfw key: 65 native_code: 0x61 action: PRESS mods: 0x0 text: 'a'
-
-#: Here, the key name for the A key is 0x61 and you can use it with::
-
-#: map ctrl+0x61 something
-
-#: to map ctrl+a to something.
-
-#: You can use the special action no_op to unmap a keyboard shortcut
-#: that is assigned in the default configuration::
-
-#: map kitty_mod+space no_op
-
-#: You can combine multiple actions to be triggered by a single
-#: shortcut, using the syntax below::
-
-#: map key combine <separator> action1 <separator> action2 <separator> action3 ...
-
-#: For example::
-
-#: map kitty_mod+e combine : new_window : next_layout
-
-#: this will create a new window and switch to the next available
-#: layout
-
-#: You can use multi-key shortcuts using the syntax shown below::
-
-#: map key1>key2>key3 action
-
-#: For example::
-
-#: map ctrl+f>2 set_font_size 20
-
-kitty_mod ctrl+shift
-
-#: The value of kitty_mod is used as the modifier for all default
-#: shortcuts, you can change it in your kitty.conf to change the
-#: modifiers for all the default shortcuts.
-
-clear_all_shortcuts no
-
-#: You can have kitty remove all shortcut definition seen up to this
-#: point. Useful, for instance, to remove the default shortcuts.
-
-# kitten_alias hints hints --hints-offset=0
-
-#: You can create aliases for kitten names, this allows overriding the
-#: defaults for kitten options and can also be used to shorten
-#: repeated mappings of the same kitten with a specific group of
-#: options. For example, the above alias changes the default value of
-#: kitty +kitten hints --hints-offset to zero for all mappings,
-#: including the builtin ones.
-
-#: Clipboard {{{
-
-map kitty_mod+c copy_to_clipboard
-
-#: There is also a copy_or_interrupt action that can be optionally
-#: mapped to Ctrl+c. It will copy only if there is a selection and
-#: send an interrupt otherwise. Similarly, copy_and_clear_or_interrupt
-#: will copy and clear the selection or send an interrupt if there is
-#: no selection.
-
-map kitty_mod+v paste_from_clipboard
-map kitty_mod+s paste_from_selection
-map shift+insert paste_from_selection
-map kitty_mod+o pass_selection_to_program
-
-#: You can also pass the contents of the current selection to any
-#: program using pass_selection_to_program. By default, the system's
-#: open program is used, but you can specify your own, the selection
-#: will be passed as a command line argument to the program, for
-#: example::
-
-#: map kitty_mod+o pass_selection_to_program firefox
+scrollback_lines 2000
+scrollback_pager_history_size 4000
-#: You can pass the current selection to a terminal program running in
-#: a new kitty window, by using the @selection placeholder::
+copy_on_select no
+strip_trailing_spaces smart
+rectangle_select_modifiers ctrl+alt
+clipboard_control write-clipboard write-primary
-#: map kitty_mod+y new_window less @selection
+kitty_mod ctrl+shift
-#: }}}
+open_url_modifiers kitty_mod
-#: Scrolling {{{
+map kitty_mod+c copy_to_clipboard
+map kitty_mod+v paste_from_clipboard
+map kitty_mod+s paste_from_selection
+map shift+insert paste_from_selection
+map kitty_mod+o pass_selection_to_program
map kitty_mod+up scroll_line_up
map kitty_mod+k scroll_line_up
@@ -1054,243 +50,59 @@ map kitty_mod+home scroll_home
map kitty_mod+end scroll_end
map kitty_mod+h show_scrollback
-#: You can pipe the contents of the current screen + history buffer as
-#: STDIN to an arbitrary program using the ``launch`` function. For
-#: example, the following opens the scrollback buffer in less in an
-#: overlay window::
-
-#: map f1 launch --stdin-source=@screen_scrollback --stdin-add-formatting --type=overlay less +G -R
-
-#: For more details on piping screen and buffer contents to external
-#: programs, see launch.
-
-#: }}}
-
-#: Window management {{{
-
-map kitty_mod+enter new_window
-
-#: You can open a new window running an arbitrary program, for
-#: example::
-
-#: map kitty_mod+y launch mutt
-
-#: You can open a new window with the current working directory set to
-#: the working directory of the current window using::
-
-#: map ctrl+alt+enter launch --cwd=current
-
-#: You can open a new window that is allowed to control kitty via the
-#: kitty remote control facility by prefixing the command line with @.
-#: Any programs running in that window will be allowed to control
-#: kitty. For example::
-
-#: map ctrl+enter launch --allow-remote-control some_program
-
-#: You can open a new window next to the currently active window or as
-#: the first window, with::
-
-#: map ctrl+n launch --location=neighbor some_program
-#: map ctrl+f launch --location=first some_program
-
-#: For more details, see launch.
-
-map kitty_mod+n new_os_window
-
-#: Works like new_window above, except that it opens a top level OS
-#: kitty window. In particular you can use new_os_window_with_cwd to
-#: open a window with the current working directory.
-
-map kitty_mod+w close_window
-map kitty_mod+] next_window
-map kitty_mod+[ previous_window
-map kitty_mod+f move_window_forward
-map kitty_mod+b move_window_backward
-map kitty_mod+` move_window_to_top
-map kitty_mod+r start_resizing_window
-map kitty_mod+1 first_window
-map kitty_mod+2 second_window
-map kitty_mod+3 third_window
-map kitty_mod+4 fourth_window
-map kitty_mod+5 fifth_window
-map kitty_mod+6 sixth_window
-map kitty_mod+7 seventh_window
-map kitty_mod+8 eighth_window
-map kitty_mod+9 ninth_window
-map kitty_mod+0 tenth_window
-#: }}}
-
-#: Tab management {{{
-
-map kitty_mod+right next_tab
-map kitty_mod+left previous_tab
-map kitty_mod+t new_tab
-map kitty_mod+q close_tab
-map kitty_mod+. move_tab_forward
-map kitty_mod+, move_tab_backward
-map kitty_mod+alt+t set_tab_title
-
-#: You can also create shortcuts to go to specific tabs, with 1 being
-#: the first tab, 2 the second tab and -1 being the previously active
-#: tab, and any number larger than the last tab being the last tab::
-
-#: map ctrl+alt+1 goto_tab 1
-#: map ctrl+alt+2 goto_tab 2
-
-#: Just as with new_window above, you can also pass the name of
-#: arbitrary commands to run when using new_tab and use
-#: new_tab_with_cwd. Finally, if you want the new tab to open next to
-#: the current tab rather than at the end of the tabs list, use::
-
-#: map ctrl+t new_tab !neighbor [optional cmd to run]
-#: }}}
-
-#: Layout management {{{
-
-map kitty_mod+l next_layout
-
-#: You can also create shortcuts to switch to specific layouts::
-
-#: map ctrl+alt+t goto_layout tall
-#: map ctrl+alt+s goto_layout stack
-
-#: Similarly, to switch back to the previous layout::
-
-#: map ctrl+alt+p last_used_layout
-#: }}}
-
-#: Font sizes {{{
-
-#: You can change the font size for all top-level kitty OS windows at
-#: a time or only the current one.
+map f1 launch --stdin-source=@screen_scrollback --stdin-add-formatting --type=overlay less +G -R
+
+map kitty_mod+enter launch --cwd=current
+map kitty_mod+l next_layout
+map kitty_mod+t new_tab
+map kitty_mod+q close_tab
+map kitty_mod+. move_tab_forward
+map kitty_mod+, move_tab_backward
+map kitty_mod+alt+t set_tab_title
+map kitty_mod+] next_tab
+map kitty_mod+[ previous_tab
+map kitty_mod+right next_tab
+map kitty_mod+left previous_tab
+map kitty_mod+1 goto_tab 1
+map kitty_mod+2 goto_tab 2
+map kitty_mod+3 goto_tab 3
+map kitty_mod+4 goto_tab 4
+map kitty_mod+5 goto_tab 5
+map kitty_mod+6 goto_tab 6
+map kitty_mod+7 goto_tab 7
+map kitty_mod+8 goto_tab 8
+map kitty_mod+9 goto_tab 9
+map kitty_mod+0 goto_tab 0
map kitty_mod+equal change_font_size all +2.0
map kitty_mod+minus change_font_size all -2.0
map kitty_mod+backspace change_font_size all 0
+# map kitty_mod+f6 change_font_size all 10.0
-#: To setup shortcuts for specific font sizes::
-
-#: map kitty_mod+f6 change_font_size all 10.0
-
-#: To setup shortcuts to change only the current OS window's font
-#: size::
-
-#: map kitty_mod+f6 change_font_size current 10.0
-#: }}}
-
-#: Select and act on visible text {{{
-
-#: Use the hints kitten to select text and either pass it to an
-#: external program or insert it into the terminal or copy it to the
-#: clipboard.
-
-map kitty_mod+e kitten hints
-
-#: Open a currently visible URL using the keyboard. The program used
-#: to open the URL is specified in open_url_with.
-
-map kitty_mod+p>f kitten hints --type path --program -
-
-#: Select a path/filename and insert it into the terminal. Useful, for
-#: instance to run git commands on a filename output from a previous
-#: git command.
+map kitty_mod+u kitten unicode_input
+map kitty_mod+f2 edit_config_file
+map kitty_mod+escape kitty_shell window
+map kitty_mod+e kitten hints
+map kitty_mod+p>f kitten hints --type path --program -
map kitty_mod+p>shift+f kitten hints --type path
+map kitty_mod+p>l kitten hints --type line --program -
+map kitty_mod+p>w kitten hints --type word --program -
+map kitty_mod+p>h kitten hints --type hash --program -
+map kitty_mod+p>n kitten hints --type linenum
+map kitty_mod+p>y kitten hints --type hyperlink
-#: Select a path/filename and open it with the default open program.
-
-map kitty_mod+p>l kitten hints --type line --program -
-
-#: Select a line of text and insert it into the terminal. Use for the
-#: output of things like: ls -1
-
-map kitty_mod+p>w kitten hints --type word --program -
-
-#: Select words and insert into terminal.
-
-map kitty_mod+p>h kitten hints --type hash --program -
-
-#: Select something that looks like a hash and insert it into the
-#: terminal. Useful with git, which uses sha1 hashes to identify
-#: commits
-
-map kitty_mod+p>n kitten hints --type linenum
-
-#: Select something that looks like filename:linenum and open it in
-#: vim at the specified line number.
-
-map kitty_mod+p>y kitten hints --type hyperlink
-
-#: Select a hyperlink (i.e. a URL that has been marked as such by the
-#: terminal program, for example, by ls --hyperlink=auto).
-
-
-#: The hints kitten has many more modes of operation that you can map
-#: to different shortcuts. For a full description see kittens/hints.
-#: }}}
-
-#: Miscellaneous {{{
-
-map kitty_mod+f11 toggle_fullscreen
-map kitty_mod+f10 toggle_maximized
-map kitty_mod+u kitten unicode_input
-map kitty_mod+f2 edit_config_file
-map kitty_mod+escape kitty_shell window
-
-#: Open the kitty shell in a new window/tab/overlay/os_window to
-#: control kitty using commands.
-
-map kitty_mod+a>m set_background_opacity +0.1
-map kitty_mod+a>l set_background_opacity -0.1
-map kitty_mod+a>1 set_background_opacity 1
-map kitty_mod+a>d set_background_opacity default
-map kitty_mod+delete clear_terminal reset active
-
-#: You can create shortcuts to clear/reset the terminal. For example::
-
-#: # Reset the terminal
-#: map kitty_mod+f9 clear_terminal reset active
-#: # Clear the terminal screen by erasing all contents
-#: map kitty_mod+f10 clear_terminal clear active
-#: # Clear the terminal scrollback by erasing it
-#: map kitty_mod+f11 clear_terminal scrollback active
-#: # Scroll the contents of the screen into the scrollback
-#: map kitty_mod+f12 clear_terminal scroll active
-
-#: If you want to operate on all windows instead of just the current
-#: one, use all instead of active.
-
-#: It is also possible to remap Ctrl+L to both scroll the current
-#: screen contents into the scrollback buffer and clear the screen,
-#: instead of just clearing the screen::
-
-#: map ctrl+l combine : clear_terminal scroll active : send_text normal,application \x0c
-
-
-#: You can tell kitty to send arbitrary (UTF-8) encoded text to the
-#: client program when pressing specified shortcut keys. For example::
-
-#: map ctrl+alt+a send_text all Special text
-
-#: This will send "Special text" when you press the ctrl+alt+a key
-#: combination. The text to be sent is a python string literal so you
-#: can use escapes like \x1b to send control codes or \u21fb to send
-#: unicode characters (or you can just input the unicode characters
-#: directly as UTF-8 text). The first argument to send_text is the
-#: keyboard modes in which to activate the shortcut. The possible
-#: values are normal or application or kitty or a comma separated
-#: combination of them. The special keyword all means all modes. The
-#: modes normal and application refer to the DECCKM cursor key mode
-#: for terminals, and kitty refers to the special kitty extended
-#: keyboard protocol.
-
-#: Another example, that outputs a word and then moves the cursor to
-#: the start of the line (same as pressing the Home key)::
-
-#: map ctrl+alt+a send_text normal Word\x1b[H
-#: map ctrl+alt+a send_text application Word\x1bOH
-
-#: }}}
-
-# }}}
include ./kitty-selenized-black.conf
+
+#: Keyboard shortcuts {{{
+#: For a list of key names, see: the GLFW key macros
+#: <https://github.com/kovidgoyal/kitty/blob/master/glfw/glfw3.h#L349>.
+#: The name to use is the part after the GLFW_KEY_ prefix. For a list
+#: of modifier names, see: GLFW mods
+#: <https://www.glfw.org/docs/latest/group__mods.html>
+#: On Linux you can also use XKB key names to bind keys that are not
+#: supported by GLFW. See XKB keys
+#: <https://github.com/xkbcommon/libxkbcommon/blob/master/xkbcommon/xkbcommon-
+#: keysyms.h> for a list of key names. The name to use is the part
+#: after the XKB_KEY_ prefix. Note that you can only use an XKB key
+#: name for keys that are not known as GLFW keys.
diff --git a/newsboat/read_articles b/newsboat/read_articles
@@ -586,6 +586,11 @@ https://www.calnewport.com/?p=7395
https://www.calnewport.com/?p=7402
https://machinelearningmastery.com/?p=8897
https://machinelearningmastery.com/?p=8902
+https://machinelearningmastery.com/?p=8913
+https://machinelearningmastery.com/?p=8932
+https://machinelearningmastery.com/?p=8941
+https://machinelearningmastery.com/?p=8955
+https://machinelearningmastery.com/?p=8968
https://machinelearningmastery.com/?p=9129
https://machinelearningmastery.com/?p=8999
https://machinelearningmastery.com/?p=9010
@@ -915,6 +920,8 @@ https://machinelearningmastery.com/?p=9043
http://xpenguin.club/Xpenguin-Morrowind-Special-(With-Chris-Were-and-Drew)/
https://www.calnewport.com/?p=7389
https://aiweirdness.com/post/189170306297
+https://machinelearningmastery.com/?p=9054
+https://machinelearningmastery.com/?p=9059
https://jvns.ca/blog/2019/02/17/organizing-this-blog-into-categories/
https://jvns.ca/blog/2019/03/15/new-zine--bite-size-networking-/
https://jvns.ca/blog/2019/03/26/what-are-monoidal-categories/
@@ -1741,12 +1748,16 @@ PubMed:31748403
http://xpenguin.club/Stadia-Special/
https://standardebooks.org/ebooks/andre-norton/star-born
https://standardebooks.org/ebooks/george-eliot/middlemarch
+https://machinelearningmastery.com/?p=9070
https://aiweirdness.com/post/189313008792
+https://machinelearningmastery.com/?p=9081
yt:video:ACeQjDPOdDY
https://standardebooks.org/ebooks/anna-sewell/black-beauty
https://standardebooks.org/ebooks/angela-brazil/a-popular-schoolgirl
yt:video:GUQx72j9Q3Y
yt:video:mH1GGI2Jpbs
+https://treyhunner.com/2019/11/black-friday-sale-gift-python-morsels-to-a-friend
+https://machinelearningmastery.com/?p=9100
http://xpenguin.club/XPengIN-Linux,-Lutris,-Epic-and-Stadia-(Also-some-VPN-talk)/
https://standardebooks.org/ebooks/anonymous/beowulf/john-lesslie-hall
http://www.fast.ai/2019/12/02/nbdev
@@ -1754,21 +1765,27 @@ yt:video:mxA9Gyyu6Rg
yt:video:50p0Ao06cD0
yt:video:82NBMvx6vFY
yt:video:hMSByvFHOro
+https://treyhunner.com/2019/12/cyber-monday-python-sales
+https://machinelearningmastery.com/?p=9109
https://lukesmith.xyz/2019.html#im-back-6-new-videos-out-and-more-coming
yt:video:3NJIj47Tusw
+https://machinelearningmastery.com/?p=9158
yt:video:4bezl5gXAcg
https://medium.com/p/108c569e56c1
https://lukesmith.xyz/2019.html#two-more-videos-and-important-larbs-problem
https://standardebooks.org/ebooks/m-e-braddon/lady-audleys-secret
+https://machinelearningmastery.com/?p=9171
https://aiweirdness.com/post/189511103367
https://standardebooks.org/ebooks/john-muir/my-first-summer-in-the-sierra
https://emptysqua.re/blog/pygotham-2019-speaker-coaching-recap/
https://lukesmith.xyz/2019.html#im-thinking-about-using-bspwm
+https://machinelearningmastery.com/?p=9177
http://xpenguin.club/BOOTLEGpenguin/
https://standardebooks.org/ebooks/alexandre-dumas/the-three-musketeers/william-robson
yt:video:VBNTAtpf_d4
yt:video:_hNMfVIsyIc
https://medium.com/p/f06efa6355fd
+https://machinelearningmastery.com/?p=9184
https://medium.com/p/52c88557230d
https://medium.com/p/90bcb80890ba
https://standardebooks.org/ebooks/aldous-huxley/antic-hay
@@ -1776,6 +1793,8 @@ https://standardebooks.org/ebooks/ella-cheever-thayer/wired-love
https://standardebooks.org/ebooks/samuel-butler/the-way-of-all-flesh
yt:video:wIJL-UoDGyk
https://medium.com/p/f338d64ba821
+https://erikbern.com/2019/12/09/hiring-at-better.html
+https://machinelearningmastery.com/?p=9200
https://jvns.ca/blog/how-tracking-pixels-work/
https://jvns.ca/blog/2019/12/26/whats-a-server/
https://emptysqua.re/blog/when-the-buddha-met-a-murderer/
@@ -1797,16 +1816,28 @@ https://medium.com/p/7773555400d8
https://www.calnewport.com/?p=7447
https://aiweirdness.com/post/189845472982
https://aiweirdness.com/post/189979379637
+https://machinelearningmastery.com/?p=9210
+https://machinelearningmastery.com/?p=9790
+https://machinelearningmastery.com/?p=9220
https://machinelearningmastery.com/?p=9861
+https://machinelearningmastery.com/?p=9255
+https://machinelearningmastery.com/?p=9266
+https://machinelearningmastery.com/?p=9272
https://machinelearningmastery.com/?p=9289
+https://machinelearningmastery.com/?p=9298
+https://machinelearningmastery.com/?p=9320
https://medium.com/p/9dc8d64c1a89
+https://machinelearningmastery.com/?p=9346
+https://emptysqua.re/blog/you-look-so-zen/
https://medium.com/p/30769eec5df0
yt:video:X9cBFNbihFU
https://lukesmith.xyz/2019.html#new-video-on-new-books
https://jvns.ca/blog/2020/01/05/paperwm/
+https://machinelearningmastery.com/?p=9354
PubMed:31904799
https://erikbern.com/2019/12/31/hiring-always-means-tradeoffs.html
http://www.fast.ai/2020/01/07/data-questionnaire
+https://machinelearningmastery.com/?p=9370
https://statmodeling.stat.columbia.edu/?p=41918
https://statmodeling.stat.columbia.edu/?p=42783
https://statmodeling.stat.columbia.edu/?p=41671
@@ -1835,16 +1866,44 @@ https://statmodeling.stat.columbia.edu/?p=42888
http://xpenguin.club/HexShards-Tape1/
https://emptysqua.re/blog/year-end-2019-photos/
https://emptysqua.re/blog/yokoji-zmc-august-2019/
+http://treyhunner.com/2018/03/tuple-unpacking-improves-python-code-readability
+http://treyhunner.com/2018/04/keyword-arguments-in-python
+http://treyhunner.com/2018/04/how-to-make-the-most-of-your-first-pycon
+http://treyhunner.com/2018/06/how-to-make-an-iterator-in-python
+http://treyhunner.com/2018/09/stop-writing-lambda-expressions
+http://treyhunner.com/2018/10/asterisks-in-python-what-they-are-and-how-to-use-them
+http://treyhunner.com/2018/11/python-morsels-sale-52-weeks-of-python
+http://treyhunner.com/2018/11/python-cyber-monday-sales
+http://treyhunner.com/2018/12/why-you-should-be-using-pathlib
+http://treyhunner.com/2019/01/no-really-pathlib-is-great
+http://treyhunner.com/2019/03/python-deep-comparisons-and-code-readability
+http://treyhunner.com/2019/03/unique-and-sentinel-values-in-python
+http://treyhunner.com/2019/03/abusing-and-overusing-list-comprehensions-in-python
+http://treyhunner.com/2019/04/making-the-most-of-the-pycon-sprints
+http://treyhunner.com/2019/04/why-you-shouldnt-inherit-from-list-and-dict-in-python
+http://treyhunner.com/2019/04/is-it-a-class-or-a-function-its-a-callable
+http://treyhunner.com/2019/05/python-builtins-worth-learning
+http://treyhunner.com/2019/06/loop-better-a-deeper-look-at-iteration-in-python
+http://treyhunner.com/2019/11/black-friday-sale-gift-python-morsels-to-a-friend
+http://treyhunner.com/2019/12/cyber-monday-python-sales
https://aiweirdness.com/post/190160884937
+https://machinelearningmastery.com/?p=9377
+https://machinelearningmastery.com/?p=9385
+https://machinelearningmastery.com/?p=9726
https://statmodeling.stat.columbia.edu/?p=42907
http://www.fast.ai/2020/01/13/self_supervised
https://medium.com/p/3a93573d4f07
+https://medium.com/p/3748efe5fcdf
https://erikbern.com/2020/01/13/how-to-hire-smarter-than-the-market-a-toy-model.html
+https://treyhunner.com/2020/01/passing-functions-as-arguments
+https://machinelearningmastery.com/?p=9389
https://statmodeling.stat.columbia.edu/?p=42926
https://statmodeling.stat.columbia.edu/?p=42051
https://distill.pub/2020/attribution-baselines
https://statmodeling.stat.columbia.edu/?p=42936
http://www.fast.ai/2020/01/16/fast_template
+https://machinelearningmastery.com/?p=9781
+https://machinelearningmastery.com/?p=9397
http://www.fast.ai/2020/01/18/gitblog
http://www.fast.ai/2020/01/19/blog_screenshots
https://aiweirdness.com/post/190313362077
@@ -1853,11 +1912,15 @@ http://www.fast.ai/2020/01/20/nb2md
http://www.fast.ai/2020/01/20/blog_overview
yt:video:an0RFLzJ5Yo
https://davebucklin.com/play/2020/01/19/expenses-ledger.html
+https://machinelearningmastery.com/?p=9424
https://lukesmith.xyz/2019.html#newold-episode-of-not-related-out-every-scientific-paper-youve-read-is-wrong
http://www.fast.ai/2020/01/21/responsible-government
+https://machinelearningmastery.com/?p=9454
+https://machinelearningmastery.com/?p=9462
yt:video:6YfRgI0xrfI
https://aiweirdness.com/post/190441069697
yt:video:n7lYxXrzbjk
+https://machinelearningmastery.com/?p=9482
https://www.calnewport.com/?p=7464
https://www.mrmoneymustache.com/?p=15961
https://davebucklin.com/work/2020/01/25/essential-diagrams.html
@@ -1868,6 +1931,9 @@ blog/gear-we-took-to-new-zealand-final-part
blog/styling-ordered-lists
blog/ssl-on-your-local-nginx
blog/beyond-tellerrand-and-indiewebcamp-2016
+blog/i-am-now-an-official-ultralight-hiker
+blog/a-modern-mutt-setup
+blog/a-modern-mutt-setup-part-two
http://www.rosipov.com/blog/randomly-generated-dungeons
http://www.rosipov.com/blog/spawning-evenly-distributed-mobs
http://www.rosipov.com/blog/mob-level-distribution
@@ -1876,16 +1942,20 @@ http://www.rosipov.com/blog/hackmud-first-impressions
http://www.rosipov.com/blog/prius-adventures-a-year-later
http://www.rosipov.com/blog/journey-of-a-friend
http://www.rosipov.com/blog/desktop-notifications-from-chrome-secure-shell
+http://www.rosipov.com/blog/a-trip-to-salt-lake-city
http://www.rosipov.com/blog/automating-octopress-publishing
http://www.rosipov.com/blog/making-a-packing-spreadsheet
http://www.rosipov.com/blog/minimalist-phone-launcher
http://www.rosipov.com/blog/cross-platform-vim-plug-setup
http://www.rosipov.com/blog/my-book-has-been-published
http://www.rosipov.com/blog/status-bar-color-in-vim-terminal-mode
+https://machinelearningmastery.com/?p=9492
https://standardebooks.org/ebooks/gaston-leroux/the-phantom-of-the-opera/alexander-teixeira-de-mattos
PubMed:31987356
https://standardebooks.org/ebooks/homer/the-iliad/william-cullen-bryant
yt:video:f9qNXV01yzg
+https://machinelearningmastery.com/?p=9499
+https://machinelearningmastery.com/?p=9511
PubMed:32003078
yt:video:qRr1KRKVeh8
https://aiweirdness.com/post/190569291992
@@ -1893,11 +1963,14 @@ https://lukesmith.xyz/2019.html#big-fix-for-the-stsuckless-crashonemoji-error
https://emptysqua.re/blog/village-zendo-meditation/
yt:video:2xl56IJGKwY
yt:video:K3B8fIdixo0
+https://machinelearningmastery.com/?p=9525
https://medium.com/p/2ee9cef26ac1
+https://machinelearningmastery.com/?p=9533
https://standardebooks.org/ebooks/homer/the-odyssey/william-cullen-bryant
https://standardebooks.org/ebooks/john-w-campbell/islands-of-space
http://lukeoakdenrayner.wordpress.com/?p=9082
https://aiweirdness.com/post/190721709472
+https://machinelearningmastery.com/?p=9548
https://standardebooks.org/ebooks/george-eliot/the-mill-on-the-floss
https://jvns.ca/blog/compensation-questions/
https://distill.pub/2020/growing-ca
@@ -1911,32 +1984,50 @@ http://www.fast.ai/2020/02/09/CADE-big-picture
http://www.fast.ai/2020/02/13/fastai-A-Layered-API-for-Deep-Learning
http://www.fast.ai/2020/02/26/CADE-disinformation
https://medium.com/p/af9ddb561721
+https://machinelearningmastery.com/?p=9562
+https://machinelearningmastery.com/?p=9573
+https://machinelearningmastery.com/?p=9589
+https://machinelearningmastery.com/?p=9597
+https://machinelearningmastery.com/?p=9634
+https://machinelearningmastery.com/?p=9648
+https://machinelearningmastery.com/?p=9657
+https://machinelearningmastery.com/?p=9674
PubMed:32103158
https://emptysqua.re/blog/how-not-to-panic/
https://standardebooks.org/ebooks/laurence-sterne/the-life-and-opinions-of-tristram-shandy-gentleman
https://olgabotvinnik.com/blog/hot-install-docker-container/
https://aiweirdness.com/post/190825122292
https://aiweirdness.com/post/611219307217797120
+https://machinelearningmastery.com/?p=9682
https://lukesmith.xyz/2020.html#new-video-on-new-books
https://lukesmith.xyz/2020.html#newold-episode-of-not-related-out-every-scientific-paper-youve-read-is-wrong
https://lukesmith.xyz/2020.html#big-fix-for-the-stsuckless-crashonemoji-error
https://standardebooks.org/ebooks/charles-dickens/oliver-twist
https://www.mrmoneymustache.com/?p=16221
https://aiweirdness.com/post/611853103688499200
+https://machinelearningmastery.com/?p=9692
+https://machinelearningmastery.com/?p=9705
+https://machinelearningmastery.com/?p=9716
http://www.fast.ai/2020/03/09/coronavirus
https://standardebooks.org/ebooks/herman-melville/short-fiction
+https://medium.com/p/9ca398573d2f
https://statmodeling.stat.columbia.edu/?p=43291
+https://distill.pub/2020/circuits/zoom-in
https://emptysqua.re/blog/joren-shuso-hossen/
https://www.calnewport.com/?p=7544
+https://machinelearningmastery.com/?p=9738
PubMed:32160449
+https://machinelearningmastery.com/?p=9757
yt:video:A6JXNZQwoYE
https://lukesmith.xyz/2020.html#ill-be-at-linuxfest-southeast-june-1214-in-charlotte-nc
https://jvns.ca/blog/2020/03/15/writing-shaders-with-signed-distance-functions/
https://aiweirdness.com/post/612669075940900864
+https://machinelearningmastery.com/?p=9764
https://distill.pub/2020/grand-tour
http://www.spoon-tamago.com/?p=47743
http://www.spoon-tamago.com/?p=47758
http://www.spoon-tamago.com/?p=47771
+http://www.spoon-tamago.com/?p=47783
http://www.spoon-tamago.com/?p=47794
http://www.spoon-tamago.com/?p=47805
http://www.spoon-tamago.com/?p=47817
@@ -1954,40 +2045,68 @@ http://thesheriffofsodium.com/?p=1725
http://thesheriffofsodium.com/?p=1886
http://thesheriffofsodium.com/?p=1918
http://thesheriffofsodium.com/2020/03/10/the-lecture-that-never-got-to-be/
+https://machinelearningmastery.com/?p=9802
https://standardebooks.org/ebooks/agatha-christie/poirot-investigates
+https://machinelearningmastery.com/?p=9843
+http://www.spoon-tamago.com/?p=47891
http://www.fast.ai/2020/03/20/saving-the-mask
https://aiweirdness.com/post/613123668121419776
+https://machinelearningmastery.com/?p=9988
https://lukesmith.xyz/2020.html#font-gone-crazy-in-larbs
http://lukeoakdenrayner.wordpress.com/?p=9140
https://standardebooks.org/ebooks/o-henry/short-fiction
https://standardebooks.org/ebooks/cicero/tusculan-disputations/c-d-yonge
+https://machinelearningmastery.com/?p=10025
https://standardebooks.org/ebooks/alexander-pushkin/eugene-onegin/henry-spalding
https://standardebooks.org/ebooks/john-galsworthy/the-forsyte-saga
+http://www.spoon-tamago.com/?p=47905
http://www.spoon-tamago.com/?p=47925
https://medium.com/p/448a3f6f110a
http://www.spoon-tamago.com/?p=47929
https://aiweirdness.com/post/613754259190808576
+https://machinelearningmastery.com/?p=10039
+https://emptysqua.re/blog/climbing-under-lockdown/
+https://machinelearningmastery.com/?p=10045
https://standardebooks.org/ebooks/edith-wharton/the-age-of-innocence
https://standardebooks.org/ebooks/william-morris/the-water-of-the-wondrous-isles
https://standardebooks.org/ebooks/epictetus/discourses/george-long
http://www.fast.ai/2020/03/31/tech-policy-govt
yt:video:Q-Y5xqDkC50
+http://thesheriffofsodium.com/?p=2147
http://www.spoon-tamago.com/?p=47947
http://www.spoon-tamago.com/?p=47962
+http://www.spoon-tamago.com/?p=47979
+http://www.spoon-tamago.com/?p=47992
+http://www.spoon-tamago.com/?p=47999
https://www.mrmoneymustache.com/?p=16380
https://aiweirdness.com/post/614209593176899584
+https://machinelearningmastery.com/?p=10070
+https://machinelearningmastery.com/?p=10096
+https://machinelearningmastery.com/?p=10100
+https://machinelearningmastery.com/?p=10141
https://lukesmith.xyz/2020.html#lincucks-fest-has-been-canceled
https://distill.pub/2020/circuits
https://distill.pub/2020/circuits/early-vision
https://standardebooks.org/ebooks/charlotte-bronte/shirley
http://www.spoon-tamago.com/?p=48020
https://aiweirdness.com/post/614935849124102144
+https://machinelearningmastery.com/?p=10155
+https://machinelearningmastery.com/?p=10169
http://www.fast.ai/2020/04/13/masks-summary
+https://emptysqua.re/blog/how-buddhism-survived-japanese-internment/
+https://emptysqua.re/blog/journal-of-the-plague-year/
http://www.spoon-tamago.com/?p=48028
+http://www.spoon-tamago.com/?p=48040
+https://machinelearningmastery.com/?p=10176
https://standardebooks.org/ebooks/william-hope-hodgson/the-night-land
+https://www.mrmoneymustache.com/?p=16438
http://www.spoon-tamago.com/?p=48052
+http://www.spoon-tamago.com/?p=48066
+https://machinelearningmastery.com/?p=10187
http://www.spoon-tamago.com/?p=48076
https://aiweirdness.com/post/615654447163621376
+http://thesheriffofsodium.com/?p=2277
+https://machinelearningmastery.com/?p=10199
https://standardebooks.org/ebooks/henry-david-thoreau/a-week-on-the-concord-and-merrimack-rivers
http://www.fast.ai/2020/04/20/skeptics-masks
yt:video:1mr3issv79s
@@ -1997,15 +2116,24 @@ https://medium.com/p/2178597ba921
http://www.spoon-tamago.com/?p=48085
http://www.spoon-tamago.com/?p=48094
https://standardebooks.org/ebooks/compton-mackenzie/sinister-street
+https://machinelearningmastery.com/?p=10211
+https://machinelearningmastery.com/?p=10220
https://lukesmith.xyz/2020.html#check-out-my-dwm-and-dwmblocks-builds-and-say-goodbye-to-i3
https://standardebooks.org/ebooks/william-shakespeare/poetry
https://aiweirdness.com/post/616292784700276736
https://standardebooks.org/ebooks/robert-frost/new-hampshire
+http://www.spoon-tamago.com/?p=48102
PubMed:32333753
+https://machinelearningmastery.com/?p=10227
https://jvns.ca/blog/2020/04/27/new-zine-how-containers-work/
+http://www.spoon-tamago.com/?p=48116
+https://machinelearningmastery.com/?p=10239
https://jvns.ca/blog/2020/04/29/why-strace-doesnt-work-in-docker/
+https://machinelearningmastery.com/?p=10244
+http://www.spoon-tamago.com/?p=48129
https://standardebooks.org/ebooks/diogenes-laertius/the-lives-and-opinions-of-eminent-philosophers/c-d-yonge
https://www.mrmoneymustache.com/?p=16093
+https://machinelearningmastery.com/?p=10257
https://lukesmith.xyz/2020.html#new-website-setup-also-a-statusbar-module-for-network-traffic
http://www.spoon-tamago.com/?p=48139
http://www.rosipov.com/blog/adjusting-to-wfh
@@ -2015,14 +2143,23 @@ https://distill.pub/2020/bayesian-optimization
https://standardebooks.org/ebooks/john-bunyan/the-pilgrims-progress
https://medium.com/p/3ca8bff4e71a
http://www.spoon-tamago.com/?p=48159
+https://machinelearningmastery.com/?p=10272
+https://machinelearningmastery.com/?p=10282
+http://www.spoon-tamago.com/?p=48167
https://aiweirdness.com/post/617558958271561728
https://standardebooks.org/ebooks/richard-marsh/the-beetle
+http://thesheriffofsodium.com/?p=2333
+https://machinelearningmastery.com/?p=10288
+https://machinelearningmastery.com/?p=10298
https://lukesmith.xyz/2020.html#why-do-i-so-rarely-talk-about-politics-on-my-channel
https://lukesmith.xyz/2020.html#politics-matters-most-to-slaves
https://standardebooks.org/ebooks/nathaniel-hawthorne/the-scarlet-letter
https://standardebooks.org/ebooks/james-branch-cabell/the-cream-of-the-jest
https://aiweirdness.com/post/618298096035741696
+https://machinelearningmastery.com/?p=10526
+https://machinelearningmastery.com/?p=10317
https://emptysqua.re/blog/who-can-you-trust/
+https://emptysqua.re/blog/meditation-at-home/
https://emptysqua.re/blog/python-language-summit-2020/
https://standardebooks.org/ebooks/thomas-hardy/the-mayor-of-casterbridge
https://standardebooks.org/ebooks/edgar-rice-burroughs/the-warlord-of-mars
@@ -2032,19 +2169,32 @@ https://standardebooks.org/ebooks/edgar-rice-burroughs/the-gods-of-mars
https://standardebooks.org/ebooks/sarah-orne-jewett/the-country-of-the-pointed-firs
https://standardebooks.org/ebooks/charlotte-perkins-gilman/herland
https://medium.com/p/786646707dcb
+http://thesheriffofsodium.com/?p=2408
+http://thesheriffofsodium.com/?p=2457
http://www.spoon-tamago.com/?p=48183
http://www.spoon-tamago.com/?p=48195
http://www.spoon-tamago.com/?p=48220
http://www.spoon-tamago.com/?p=48237
http://www.spoon-tamago.com/?p=48266
+http://www.spoon-tamago.com/?p=48274
http://www.spoon-tamago.com/?p=48253
http://www.spoon-tamago.com/?p=48299
http://www.spoon-tamago.com/?p=48312
https://aiweirdness.com/post/619190785060028416
http://www.rosipov.com/blog/numenera-for-dnd-players
http://www.rosipov.com/blog/numenera-for-dnd-dms
+https://machinelearningmastery.com/?p=10326
+https://machinelearningmastery.com/?p=10335
+https://machinelearningmastery.com/?p=10346
+https://machinelearningmastery.com/?p=10357
+https://machinelearningmastery.com/?p=10365
+https://machinelearningmastery.com/?p=10637
+https://machinelearningmastery.com/?p=10530
+https://machinelearningmastery.com/?p=10800
+https://machinelearningmastery.com/?p=10817
PubMed:32428651
PubMed:32477638
+https://sanctum.geek.nz/arabesque/?p=2195
https://lukesmith.xyz/2020.html#new-video-showcase-of-my-dwm-build
https://lukesmith.xyz/2020.html#the-advantages-of-dwmblocks
https://lukesmith.xyz/2020.html#ripping-and-spliting-and-tagging-audiobooks-and-albums-from-youtube
@@ -2066,26 +2216,322 @@ https://lukesmith.xyz/2020.html#oooof-big-server-downage
https://lukesmith.xyz/2020.html#ill-have-server-downtime-tomorrow
https://standardebooks.org/ebooks/e-e-smith/triplanetary
http://www.spoon-tamago.com/?p=48330
+http://www.spoon-tamago.com/?p=48339
+https://machinelearningmastery.com/?p=10824
https://lukesmith.xyz/2020.html#le-shill-lion
https://lukesmith.xyz/2020.html#gnutards-unequivocally-destroyed-eternally
https://lukesmith.xyz/2020.html#i-have-my-own-search-engine-now
https://standardebooks.org/ebooks/edward-lear/nonsense-books
https://standardebooks.org/ebooks/eugene-oneill/the-hairy-ape
https://aiweirdness.com/post/620645957819875328
+https://machinelearningmastery.com/?p=10834
https://jvns.ca/blog/2020/06/14/questions-to-help-you-learn/
https://standardebooks.org/ebooks/yevgeny-zamyatin/we/gregory-zilboorg
https://standardebooks.org/ebooks/edgar-rice-burroughs/at-the-earths-core
+http://tastetesterdoc.com/?p=227
+http://www.spoon-tamago.com/?p=48350
+https://machinelearningmastery.com/?p=10842
https://standardebooks.org/ebooks/charlotte-bronte/villette
http://www.fast.ai/2020/06/16/CADE-fellows
http://www.spoon-tamago.com/?p=48369
+https://machinelearningmastery.com/?p=10853
https://distill.pub/2020/circuits/curve-detectors
https://aiweirdness.com/post/621186154843324416
http://www.spoon-tamago.com/?p=48384
+http://www.spoon-tamago.com/?p=48400
+http://www.spoon-tamago.com/?p=48412
+https://machinelearningmastery.com/?p=10858
+https://lukesmith.xyz/2020.html#anyone-done-peertube-before
+https://lukesmith.xyz/2020.html#a-guide-to-using-rss-to-replace-social-media
+http://www.spoon-tamago.com/?p=48421
+https://machinelearningmastery.com/?p=10869
+http://www.spoon-tamago.com/?p=48439
https://standardebooks.org/ebooks/l-frank-baum/the-marvelous-land-of-oz
https://standardebooks.org/ebooks/lewis-carroll/a-tangled-tale
+http://www.spoon-tamago.com/?p=48453
+http://www.spoon-tamago.com/?p=48469
+https://machinelearningmastery.com/?p=10539
+http://thesheriffofsodium.com/?p=2523
+https://machinelearningmastery.com/?p=10877
/
+https://www.romanzolotarev.com/website.html
+https://www.romanzolotarev.com/standalone.html
+https://www.romanzolotarev.com/macos/textedit.html
+https://www.romanzolotarev.com/js-ramda-elm.html
+https://www.romanzolotarev.com/screencasts.html
+https://www.romanzolotarev.com/typing.html
+https://www.romanzolotarev.com/jekyll.html
+https://www.romanzolotarev.com/github.html
+https://www.romanzolotarev.com/macos/security.html
+https://www.romanzolotarev.com/vim.html
+https://www.romanzolotarev.com/macos/openbsd-installer.html
+https://www.romanzolotarev.com/macos/cups.html
+https://www.romanzolotarev.com/borg.html
+https://www.romanzolotarev.com/rssg.html
+https://www.romanzolotarev.com/ssg.html
+https://www.romanzolotarev.com/vi.html
+https://www.romanzolotarev.com/tmux.html
+https://www.romanzolotarev.com/markdown.html
+https://www.romanzolotarev.com/ws.html
+https://www.romanzolotarev.com/openbsd/nsd.html
+https://www.romanzolotarev.com/openbsd/smtpd-forward.html
+https://www.romanzolotarev.com/openbsd/acme-client.html
+https://www.romanzolotarev.com/openbsd/httpd.html
+https://www.romanzolotarev.com/stagit.html
+https://www.romanzolotarev.com/git.html
+https://www.romanzolotarev.com/openbsd/yubikey.html
+https://www.romanzolotarev.com/openbsd/mtp.html
+https://www.romanzolotarev.com/openbsd/exfat.html
+https://www.romanzolotarev.com/openbsd/mount.html
+https://www.romanzolotarev.com/openbsd/cwm.html
+https://www.romanzolotarev.com/openbsd/xenodm.html
+https://www.romanzolotarev.com/ssh.html
+https://www.romanzolotarev.com/pass.html
+https://www.romanzolotarev.com/diceware.html
+https://www.romanzolotarev.com/openbsd/timezone.html
+https://www.romanzolotarev.com/xdg-mime.html
+https://www.romanzolotarev.com/newsboat.html
+https://www.romanzolotarev.com/openbsd/bioctl-crypto.html
+https://www.romanzolotarev.com/openbsd/lenovo-thinkpad-x1c5.html
+https://www.romanzolotarev.com/openbsd/dock.html
+https://www.romanzolotarev.com/openbsd/geteltorito.html
+https://www.romanzolotarev.com/openbsd/disk.html
+https://www.romanzolotarev.com/random.html
+https://www.romanzolotarev.com/openbsd/upgrade.html
+https://www.romanzolotarev.com/openbsd/install.html
+https://www.romanzolotarev.com/openbsd/vultr.html
+https://www.romanzolotarev.com/openbsd/oams.html
+http://www.spoon-tamago.com/?p=48483
https://standardebooks.org/ebooks/william-shakespeare/a-midsummer-nights-dream
https://standardebooks.org/ebooks/andre-norton/the-time-traders
+http://www.fast.ai/2020/06/26/particle-sizes
+https://machinelearningmastery.com/?p=10873
+http://www.spoon-tamago.com/?p=48500
https://standardebooks.org/ebooks/edgar-rice-burroughs/pellucidar
https://standardebooks.org/ebooks/jules-verne/journey-to-the-center-of-the-earth/f-a-malleson
https://standardebooks.org/ebooks/fyodor-dostoevsky/the-gambler/c-j-hogarth
+http://www.spoon-tamago.com/?p=48515
+https://machinelearningmastery.com/?p=10887
+https://machinelearningmastery.com/?p=10976
+https://standardebooks.org/ebooks/e-e-smith/first-lensman
+http://thesheriffofsodium.com/?p=369
+http://www.spoon-tamago.com/?p=48533
+http://www.spoon-tamago.com/?p=48564
+http://www.spoon-tamago.com/?p=48577
+https://machinelearningmastery.com/?p=10982
+https://machinelearningmastery.com/?p=10992
+https://standardebooks.org/ebooks/thomas-malory/le-morte-darthur
+http://www.spoon-tamago.com/?p=48593
+http://www.spoon-tamago.com/?p=48609
+http://www.spoon-tamago.com/?p=48624
+https://machinelearningmastery.com/?p=10997
+https://lukesmith.xyz/2020.html#ill-be-returning-to-make-videos-on-monday-check-out-peertube
+https://machinelearningmastery.com/?p=11007
+https://standardebooks.org/ebooks/james-branch-cabell/jurgen
+http://www.fast.ai/2020/07/10/upgrade-your-mask
+http://thesheriffofsodium.com/?p=2280
+https://machinelearningmastery.com/?p=11019
+https://lukesmith.xyz/2020.html#ill-be-migrating-to-a-superior-server-for-peertube
+https://standardebooks.org/ebooks/e-m-forster/howards-end
+https://medium.com/p/f7051040e0d7
+http://www.spoon-tamago.com/?p=48635
+https://lukesmith.xyz/2020.html#peertube-will-be-down-for-migration-today
+https://lukesmith.xyz/2020.html#peertube-migration-is-done-no-obvious-errors-full-video-sync-to-happen-soon
+https://standardebooks.org/ebooks/vladimir-korolenko/short-fiction/aline-delano_sergius-stepniak_william-westall_thomas-seltzer_the-russian-review_marian-fell_clarence-manning
+https://standardebooks.org/ebooks/fyodor-dostoevsky/poor-folk/c-j-hogarth
+http://www.spoon-tamago.com/?p=48641
+https://machinelearningmastery.com/?p=11024
+https://distill.pub/2020/selforg/mnist
+https://distill.pub/2020/selforg
+https://standardebooks.org/ebooks/agatha-christie/the-man-in-the-brown-suit
+https://standardebooks.org/ebooks/thomas-hardy/jude-the-obscure
+https://standardebooks.org/ebooks/jack-london/the-iron-heel
+https://standardebooks.org/ebooks/p-g-wodehouse/piccadilly-jim
+https://standardebooks.org/ebooks/william-shakespeare/the-comedy-of-errors
+https://standardebooks.org/ebooks/leo-tolstoy/war-and-peace/louise-maude_aylmer-maude
+https://standardebooks.org/ebooks/leonid-andreyev/satans-diary/herman-bernstein
+https://standardebooks.org/ebooks/p-g-wodehouse/ukridge-stories
+https://standardebooks.org/ebooks/sinclair-lewis/main-street
+https://standardebooks.org/ebooks/william-wells-brown/clotel
+https://standardebooks.org/ebooks/fritz-leiber/short-fiction
+https://standardebooks.org/ebooks/john-w-campbell/the-black-star-passes
+https://standardebooks.org/ebooks/samuel-butler/erewhon
+https://standardebooks.org/ebooks/james-weldon-johnson/the-autobiography-of-an-ex-colored-man
+https://standardebooks.org/ebooks/thornton-w-burgess/green-meadow-stories
+https://standardebooks.org/ebooks/h-rider-haggard/she/maurice-greiffenhagen_charles-h-m-kerr
+https://standardebooks.org/ebooks/lytton-strachey/queen-victoria
+https://standardebooks.org/ebooks/thornton-w-burgess/green-forest-stories
+https://standardebooks.org/ebooks/mark-twain/roughing-it
+http://www.fast.ai/2020/08/19/data-ethics
+http://www.fast.ai/2020/08/20/soumith-forward
+http://www.fast.ai/2020/08/21/fastai2-launch
+http://thesheriffofsodium.com/2020/08/04/grand-rounds-the-rise-and-fall-of-usmle-step-1/
+http://thesheriffofsodium.com/?p=2731
+http://www.spoon-tamago.com/?p=48939
+http://www.spoon-tamago.com/?p=48956
+http://www.spoon-tamago.com/?p=48953
+https://www.spoon-tamago.com/?p=48986
+https://www.spoon-tamago.com/?p=48998
+https://www.spoon-tamago.com/?p=49013
+https://www.spoon-tamago.com/?p=49034
+https://www.spoon-tamago.com/?p=49054
+https://www.spoon-tamago.com/?p=49063
+https://www.spoon-tamago.com/?p=49081
+https://machinelearningmastery.com/?p=10306
+https://machinelearningmastery.com/?p=11030
+https://machinelearningmastery.com/?p=10396
+https://machinelearningmastery.com/?p=10375
+https://machinelearningmastery.com/?p=10545
+https://machinelearningmastery.com/?p=11275
+https://machinelearningmastery.com/?p=10705
+https://machinelearningmastery.com/?p=10739
+https://machinelearningmastery.com/?p=10790
+https://machinelearningmastery.com/?p=10417
+https://lukesmith.xyz/2020.html#open-call-for-larbs-users
+https://lukesmith.xyz/2020.html#redesigning-the-website
+https://lukesmith.xyz/2020.html#recommended-libreopen-source-crypto-wallet
+https://lukesmith.xyz/2020.html#internet-has-been-cucking-me
+https://lukesmith.xyz/2020.html#only-mediocre-minds-nitpick-new-article
+https://lukesmith.xyz/2020.html#new-documentaries-and-lectures-on-peertube
+https://standardebooks.org/ebooks/william-congreve/the-way-of-the-world
+https://machinelearningmastery.com/?p=10431
+https://www.spoon-tamago.com/?p=49096
+https://www.spoon-tamago.com/?p=49107
+https://emptysqua.re/blog/extreme-modelling-in-practice/
+https://standardebooks.org/ebooks/frederick-douglass/narrative-of-the-life-of-frederick-douglass
+https://standardebooks.org/ebooks/phillis-wheatley/poems-on-various-subjects-religious-and-moral
+http://thesheriffofsodium.com/?p=2836
+http://thesheriffofsodium.com/?p=2867
+https://www.spoon-tamago.com/?p=49122
+https://www.spoon-tamago.com/?p=49134
+https://www.spoon-tamago.com/?p=49146
+https://www.spoon-tamago.com/?p=49163
+https://machinelearningmastery.com/?p=10437
+https://machinelearningmastery.com/?p=10442
+https://distill.pub/2020/communicating-with-interactive-articles
+https://emptysqua.re/blog/american-religion-in-americas-time-of-crisis/
+https://standardebooks.org/ebooks/eleanor-h-porter/pollyanna
+https://standardebooks.org/ebooks/james-stephens/irish-fairy-tales
+https://standardebooks.org/ebooks/thomas-mann/bashan-and-i/herman-george-scheffauer
+https://standardebooks.org/ebooks/harriet-e-wilson/our-nig
+https://standardebooks.org/ebooks/william-shakespeare/romeo-and-juliet
+https://standardebooks.org/ebooks/william-shakespeare/the-tempest
+https://standardebooks.org/ebooks/karel-capek/r-u-r/paul-selver_nigel-playfair
+http://www.fast.ai/2020/09/11/smoke-filter
+http://thesheriffofsodium.com/?p=2982
+https://www.spoon-tamago.com/?p=49197
+https://www.spoon-tamago.com/?p=49210
+https://www.spoon-tamago.com/?p=49230
+https://www.spoon-tamago.com/?p=49250
+https://www.spoon-tamago.com/?p=49282
+https://www.spoon-tamago.com/?p=49298
+https://www.spoon-tamago.com/?p=49314
+https://www.spoon-tamago.com/?p=49342
+https://www.spoon-tamago.com/?p=49365
+https://www.spoon-tamago.com/?p=49375
+https://machinelearningmastery.com/?p=10456
+https://machinelearningmastery.com/?p=10463
+https://machinelearningmastery.com/?p=10475
+https://machinelearningmastery.com/?p=10482
+https://machinelearningmastery.com/?p=10504
+https://machinelearningmastery.com/?p=10512
+https://machinelearningmastery.com/?p=10522
+https://machinelearningmastery.com/?p=10950
+https://machinelearningmastery.com/?p=10960
+https://machinelearningmastery.com/?p=10965
+https://lukesmith.xyz/poetic.html
+https://lukesmith.xyz/2020.html#working-on-something-big-possible-momentarily-larbs-downage
+https://lukesmith.xyz/credit-cards.html
+https://www.spoon-tamago.com/?p=49399
+https://www.spoon-tamago.com/?p=49410
+https://machinelearningmastery.com/?p=10668
+https://machinelearningmastery.com/?p=10675
+https://www.spoon-tamago.com/?p=49428
+https://machinelearningmastery.com/?p=10683
+https://www.spoon-tamago.com/?p=49452
+https://www.spoon-tamago.com/?p=49464
+https://standardebooks.org/ebooks/leonid-andreyev/he-who-gets-slapped/gregory-zilboorg
+https://standardebooks.org/ebooks/booth-tarkington/the-turmoil
+https://standardebooks.org/ebooks/anatole-france/penguin-island/a-w-evans
+https://standardebooks.org/ebooks/leo-tolstoy/hadji-murad/aylmer-maude
+http://thesheriffofsodium.com/?p=3007
+https://www.spoon-tamago.com/?p=49484
+https://www.spoon-tamago.com/?p=49494
+https://www.spoon-tamago.com/?p=49525
+https://machinelearningmastery.com/?p=10556
+https://machinelearningmastery.com/?p=10573
+https://machinelearningmastery.com/?p=10580
+https://lukesmith.xyz/2020.html#muttwizard-is-better-now
+https://standardebooks.org/ebooks/guy-de-maupassant/pierre-and-jean/clara-bell
+https://standardebooks.org/ebooks/henryk-sienkiewicz/quo-vadis/jeremiah-curtin
+https://standardebooks.org/ebooks/e-nesbit/five-children-and-it
+https://machinelearningmastery.com/?p=10585
+https://machinelearningmastery.com/?p=10656
+https://www.spoon-tamago.com/?p=49546
+https://machinelearningmastery.com/?p=10591
+https://www.spoon-tamago.com/?p=49564
+https://www.spoon-tamago.com/?p=49595
+https://machinelearningmastery.com/?p=10597
+https://www.spoon-tamago.com/?p=49622
+https://standardebooks.org/ebooks/giovanni-boccaccio/the-decameron/john-payne
+https://standardebooks.org/ebooks/sun-tzu/the-art-of-war/lionel-giles
+https://www.spoon-tamago.com/?p=49639
+https://machinelearningmastery.com/?p=11073
+https://machinelearningmastery.com/?p=11098
+http://thesheriffofsodium.com/?p=3043
+https://www.spoon-tamago.com/?p=49655
+https://machinelearningmastery.com/?p=11108
+https://www.spoon-tamago.com/?p=49666
+https://standardebooks.org/ebooks/ford-madox-ford/some-do-not
+https://machinelearningmastery.com/?p=11138
+http://www.fast.ai/2020/10/28/code-of-conduct
+https://machinelearningmastery.com/?p=11146
+https://www.spoon-tamago.com/?p=49688
+https://machinelearningmastery.com/?p=11722
+https://emptysqua.re/blog/rip-hazel/
+https://www.spoon-tamago.com/?p=49716
+https://standardebooks.org/ebooks/william-shakespeare/julius-caesar
+https://standardebooks.org/ebooks/william-shakespeare/king-lear
+https://www.spoon-tamago.com/?p=49731
+https://www.spoon-tamago.com/?p=49754
+https://www.spoon-tamago.com/?p=49771
+https://machinelearningmastery.com/?p=11749
+https://machinelearningmastery.com/?p=11764
+https://machinelearningmastery.com/?p=11111
+yt:video:FARlg6C23jM
+https://www.mrmoneymustache.com/?p=16043
+https://machinelearningmastery.com/?p=11574
+https://emptysqua.re/blog/these-unreliable-united-states/
+https://www.spoon-tamago.com/?p=49784
+http://zachholman.com/posts/write-angry
+https://www.spoon-tamago.com/?p=49791
+https://machinelearningmastery.com/?p=11512
+https://www.spoon-tamago.com/?p=49807
+https://distill.pub/2020/understanding-rl-vision
+https://standardebooks.org/ebooks/edgar-allan-poe/short-fiction
+https://standardebooks.org/ebooks/henry-fielding/the-history-of-tom-jones-a-foundling
+http://thesheriffofsodium.com/?p=3235
+http://zachholman.com/posts/my-favorite-tweet
+https://www.spoon-tamago.com/?p=49833
+https://www.spoon-tamago.com/?p=49848
+https://machinelearningmastery.com/?p=11191
+https://machinelearningmastery.com/?p=11198
+https://www.spoon-tamago.com/?p=49862
+https://standardebooks.org/ebooks/oscar-wilde/lord-arthur-saviles-crime-and-other-stories
+https://machinelearningmastery.com/?p=11857
+https://standardebooks.org/ebooks/virginia-woolf/jacobs-room
+https://standardebooks.org/ebooks/freeman-wills-crofts/the-cask
+https://www.spoon-tamago.com/?p=49890
+https://www.spoon-tamago.com/?p=49913
+https://machinelearningmastery.com/?p=11210
+https://machinelearningmastery.com/?p=11224
+https://standardebooks.org/ebooks/henry-george/progress-and-poverty
+http://thesheriffofsodium.com/?p=3271
+https://www.spoon-tamago.com/?p=49934
+https://www.spoon-tamago.com/?p=49963
+https://www.spoon-tamago.com/?p=49981
+https://www.spoon-tamago.com/?p=50008
+https://treyhunner.com/2020/11/short-python-screencasts-for-$50-slash-year
+https://treyhunner.com/2020/11/python-cyber-monday-sales
+https://machinelearningmastery.com/?p=11538
+https://machinelearningmastery.com/?p=11243
diff --git a/nvim/.netrwhist b/nvim/.netrwhist
@@ -1,5 +1,6 @@
let g:netrw_dirhistmax =10
-let g:netrw_dirhistcnt =5
+let g:netrw_dirhistcnt =6
+let g:netrw_dirhist_6='/home/beau/.config/nnn'
let g:netrw_dirhist_5='/home/beau/.config/nvim/plugged/vim-css-color/autoload'
let g:netrw_dirhist_4='/home/beau/.config/nvim/plugged/vim-css-color'
let g:netrw_dirhist_3='/home/beau/.config/sxhkd'
diff --git a/nvim/autoload/plug.vim b/nvim/autoload/plug.vim
@@ -25,7 +25,7 @@
" Plug 'scrooloose/nerdtree', { 'on': 'NERDTreeToggle' }
" Plug 'tpope/vim-fireplace', { 'for': 'clojure' }
"
-" " Using a non-master branch
+" " Using a non-default branch
" Plug 'rdnetto/YCM-Generator', { 'branch': 'stable' }
"
" " Using a tagged release; wildcard allowed (requires git 1.9.2 or above)
@@ -106,7 +106,7 @@ if s:is_win && &shellslash
else
let s:me = resolve(expand('<sfile>:p'))
endif
-let s:base_spec = { 'branch': 'master', 'frozen': 0 }
+let s:base_spec = { 'branch': '', 'frozen': 0 }
let s:TYPE = {
\ 'string': type(''),
\ 'list': type([]),
@@ -116,6 +116,90 @@ let s:TYPE = {
let s:loaded = get(s:, 'loaded', {})
let s:triggers = get(s:, 'triggers', {})
+function! s:isabsolute(dir) abort
+ return a:dir =~# '^/' || (has('win32') && a:dir =~? '^\%(\\\|[A-Z]:\)')
+endfunction
+
+function! s:git_dir(dir) abort
+ let gitdir = s:trim(a:dir) . '/.git'
+ if isdirectory(gitdir)
+ return gitdir
+ endif
+ if !filereadable(gitdir)
+ return ''
+ endif
+ let gitdir = matchstr(get(readfile(gitdir), 0, ''), '^gitdir: \zs.*')
+ if len(gitdir) && !s:isabsolute(gitdir)
+ let gitdir = a:dir . '/' . gitdir
+ endif
+ return isdirectory(gitdir) ? gitdir : ''
+endfunction
+
+function! s:git_origin_url(dir) abort
+ let gitdir = s:git_dir(a:dir)
+ let config = gitdir . '/config'
+ if empty(gitdir) || !filereadable(config)
+ return ''
+ endif
+ return matchstr(join(readfile(config)), '\[remote "origin"\].\{-}url\s*=\s*\zs\S*\ze')
+endfunction
+
+function! s:git_revision(dir) abort
+ let gitdir = s:git_dir(a:dir)
+ let head = gitdir . '/HEAD'
+ if empty(gitdir) || !filereadable(head)
+ return ''
+ endif
+
+ let line = get(readfile(head), 0, '')
+ let ref = matchstr(line, '^ref: \zs.*')
+ if empty(ref)
+ return line
+ endif
+
+ if filereadable(gitdir . '/' . ref)
+ return get(readfile(gitdir . '/' . ref), 0, '')
+ endif
+
+ if filereadable(gitdir . '/packed-refs')
+ for line in readfile(gitdir . '/packed-refs')
+ if line =~# ' ' . ref
+ return matchstr(line, '^[0-9a-f]*')
+ endif
+ endfor
+ endif
+
+ return ''
+endfunction
+
+function! s:git_local_branch(dir) abort
+ let gitdir = s:git_dir(a:dir)
+ let head = gitdir . '/HEAD'
+ if empty(gitdir) || !filereadable(head)
+ return ''
+ endif
+ let branch = matchstr(get(readfile(head), 0, ''), '^ref: refs/heads/\zs.*')
+ return len(branch) ? branch : 'HEAD'
+endfunction
+
+function! s:git_origin_branch(spec)
+ if len(a:spec.branch)
+ return a:spec.branch
+ endif
+
+ " The file may not be present if this is a local repository
+ let gitdir = s:git_dir(a:spec.dir)
+ let origin_head = gitdir.'/refs/remotes/origin/HEAD'
+ if len(gitdir) && filereadable(origin_head)
+ return matchstr(get(readfile(origin_head), 0, ''),
+ \ '^ref: refs/remotes/origin/\zs.*')
+ endif
+
+ " The command may not return the name of a branch in detached HEAD state
+ let result = s:lines(s:system('git symbolic-ref --short HEAD', a:spec.dir))
+ return v:shell_error ? '' : result[-1]
+endfunction
+
if s:is_win
function! s:plug_call(fn, ...)
let shellslash = &shellslash
@@ -179,7 +263,7 @@ function! s:define_commands()
endif
if has('win32')
\ && &shellslash
- \ && (&shell =~# 'cmd\.exe' || &shell =~# 'powershell\.exe')
+ \ && (&shell =~# 'cmd\(\.exe\)\?$' || &shell =~# 'powershell\(\.exe\)\?$')
return s:err('vim-plug does not support shell, ' . &shell . ', when shellslash is set.')
endif
if !has('nvim')
@@ -251,7 +335,7 @@ endfunction
function! plug#end()
if !exists('g:plugs')
- return s:err('Call plug#begin() first')
+ return s:err('plug#end() called without calling plug#begin() first')
endif
if exists('#PlugLOD')
@@ -372,7 +456,7 @@ endfunction
function! s:git_version_requirement(...)
if !exists('s:git_version')
- let s:git_version = map(split(split(s:system('git --version'))[2], '\.'), 'str2nr(v:val)')
+ let s:git_version = map(split(split(s:system(['git', '--version']))[2], '\.'), 'str2nr(v:val)')
endif
return s:version_requirement(s:git_version, a:000)
endfunction
@@ -419,7 +503,7 @@ if s:is_win
let batchfile = s:plug_tempname().'.bat'
call writefile(s:wrap_cmds(a:cmd), batchfile)
let cmd = plug#shellescape(batchfile, {'shell': &shell, 'script': 0})
- if &shell =~# 'powershell\.exe'
+ if &shell =~# 'powershell\(\.exe\)\?$'
let cmd = '& ' . cmd
endif
return [batchfile, cmd]
@@ -632,16 +716,38 @@ function! plug#(repo, ...)
let g:plugs[name] = spec
let s:loaded[name] = get(s:loaded, name, 0)
catch
- return s:err(v:exception)
+ return s:err(repo . ' ' . v:exception)
endtry
endfunction
function! s:parse_options(arg)
let opts = copy(s:base_spec)
let type = type(a:arg)
+ let opt_errfmt = 'Invalid argument for "%s" option of :Plug (expected: %s)'
if type == s:TYPE.string
+ if empty(a:arg)
+ throw printf(opt_errfmt, 'tag', 'string')
+ endif
let opts.tag = a:arg
elseif type == s:TYPE.dict
+ for opt in ['branch', 'tag', 'commit', 'rtp', 'dir', 'as']
+ if has_key(a:arg, opt)
+ \ && (type(a:arg[opt]) != s:TYPE.string || empty(a:arg[opt]))
+ throw printf(opt_errfmt, opt, 'string')
+ endif
+ endfor
+ for opt in ['on', 'for']
+ if has_key(a:arg, opt)
+ \ && type(a:arg[opt]) != s:TYPE.list
+ \ && (type(a:arg[opt]) != s:TYPE.string || empty(a:arg[opt]))
+ throw printf(opt_errfmt, opt, 'string or list')
+ endif
+ endfor
+ if has_key(a:arg, 'do')
+ \ && type(a:arg.do) != s:TYPE.funcref
+ \ && (type(a:arg.do) != s:TYPE.string || empty(a:arg.do))
+ throw printf(opt_errfmt, 'do', 'string or funcref')
+ endif
call extend(opts, a:arg)
if has_key(opts, 'dir')
let opts.dir = s:dirpath(s:plug_expand(opts.dir))
@@ -698,7 +804,7 @@ function! s:syntax()
syn match plugNumber /[0-9]\+[0-9.]*/ contained
syn match plugBracket /[[\]]/ contained
syn match plugX /x/ contained
- syn match plugDash /^-/
+ syn match plugDash /^-\{1}\ /
syn match plugPlus /^+/
syn match plugStar /^*/
syn match plugMessage /\(^- \)\@<=.*/
@@ -716,6 +822,7 @@ function! s:syntax()
syn match plugError /^x.*/
syn region plugDeleted start=/^\~ .*/ end=/^\ze\S/
syn match plugH2 /^.*:\n-\+$/
+ syn match plugH2 /^-\{2,}/
syn keyword Function PlugInstall PlugStatus PlugUpdate PlugClean
hi def link plug1 Title
hi def link plug2 Repeat
@@ -864,8 +971,15 @@ endfunction
function! s:chsh(swap)
let prev = [&shell, &shellcmdflag, &shellredir]
- if !s:is_win && a:swap
- set shell=sh shellredir=>%s\ 2>&1
+ if !s:is_win
+ set shell=sh
+ endif
+ if a:swap
+ if &shell =~# 'powershell\(\.exe\)\?$' || &shell =~# 'pwsh$'
+ let &shellredir = '2>&1 | Out-File -Encoding UTF8 %s'
+ elseif &shell =~# 'sh' || &shell =~# 'cmd\(\.exe\)\?$'
+ set shellredir=>%s\ 2>&1
+ endif
endif
return prev
endfunction
@@ -898,7 +1012,7 @@ function! s:regress_bar()
endfunction
function! s:is_updated(dir)
- return !empty(s:system_chomp('git log --pretty=format:"%h" "HEAD...HEAD@{1}"', a:dir))
+ return !empty(s:system_chomp(['git', 'log', '--pretty=format:%h', 'HEAD...HEAD@{1}'], a:dir))
endfunction
function! s:do(pull, force, todo)
@@ -935,6 +1049,7 @@ function! s:do(pull, force, todo)
endif
elseif type == s:TYPE.funcref
try
+ call s:load_plugin(spec)
let status = installed ? 'installed' : (updated ? 'updated' : 'unchanged')
call spec.do({ 'name': name, 'status': status, 'force': a:force })
catch
@@ -961,10 +1076,11 @@ endfunction
function! s:checkout(spec)
let sha = a:spec.commit
- let output = s:system('git rev-parse HEAD', a:spec.dir)
- if !v:shell_error && !s:hash_match(sha, s:lines(output)[0])
+ let output = s:git_revision(a:spec.dir)
+ if !empty(output) && !s:hash_match(sha, s:lines(output)[0])
+ let credential_helper = s:git_version_requirement(2) ? '-c credential.helper= ' : ''
let output = s:system(
- \ 'git fetch --depth 999999 && git checkout '.plug#shellescape(sha).' --', a:spec.dir)
+ \ 'git '.credential_helper.'fetch --depth 999999 && git checkout '.plug#shellescape(sha).' --', a:spec.dir)
endif
return output
endfunction
@@ -1079,11 +1195,16 @@ function! s:update_impl(pull, force, args) abort
normal! 2G
silent! redraw
- let s:clone_opt = get(g:, 'plug_shallow', 1) ?
- \ '--depth 1' . (s:git_version_requirement(1, 7, 10) ? ' --no-single-branch' : '') : ''
+ let s:clone_opt = []
+ if get(g:, 'plug_shallow', 1)
+ call extend(s:clone_opt, ['--depth', '1'])
+ if s:git_version_requirement(1, 7, 10)
+ call add(s:clone_opt, '--no-single-branch')
+ endif
+ endif
if has('win32unix') || has('wsl')
- let s:clone_opt .= ' -c core.eol=lf -c core.autocrlf=input'
+ call extend(s:clone_opt, ['-c', 'core.eol=lf', '-c', 'core.autocrlf=input'])
endif
let s:submodule_opt = s:git_version_requirement(2, 8) ? ' --jobs='.threads : ''
@@ -1171,7 +1292,7 @@ function! s:update_finish()
call s:log4(name, 'Checking out '.tag)
let out = s:system('git checkout -q '.plug#shellescape(tag).' -- 2>&1', spec.dir)
else
- let branch = get(spec, 'branch', 'master')
+ let branch = s:git_origin_branch(spec)
call s:log4(name, 'Merging origin/'.s:esc(branch))
let out = s:system('git checkout -q '.plug#shellescape(branch).' -- 2>&1'
\. (has_key(s:update.new, name) ? '' : ('&& git merge --ff-only '.plug#shellescape('origin/'.branch).' 2>&1')), spec.dir)
@@ -1264,7 +1385,7 @@ function! s:job_cb(fn, job, ch, data)
endfunction
function! s:nvim_cb(job_id, data, event) dict abort
- return a:event == 'stdout' ?
+ return (a:event == 'stdout' || a:event == 'stderr') ?
\ s:job_cb('s:job_out_cb', self, 0, join(a:data, "\n")) :
\ s:job_cb('s:job_exit_cb', self, 0, a:data)
endfunction
@@ -1273,12 +1394,15 @@ function! s:spawn(name, cmd, opts)
let job = { 'name': a:name, 'running': 1, 'error': 0, 'lines': [''],
\ 'new': get(a:opts, 'new', 0) }
let s:jobs[a:name] = job
- let cmd = has_key(a:opts, 'dir') ? s:with_cd(a:cmd, a:opts.dir, 0) : a:cmd
- let argv = s:is_win ? ['cmd', '/s', '/c', '"'.cmd.'"'] : ['sh', '-c', cmd]
if s:nvim
+ if has_key(a:opts, 'dir')
+ let job.cwd = a:opts.dir
+ endif
+ let argv = a:cmd
call extend(job, {
\ 'on_stdout': function('s:nvim_cb'),
+ \ 'on_stderr': function('s:nvim_cb'),
\ 'on_exit': function('s:nvim_cb'),
\ })
let jid = s:plug_call('jobstart', argv, job)
@@ -1291,9 +1415,16 @@ function! s:spawn(name, cmd, opts)
\ 'Invalid arguments (or job table is full)']
endif
elseif s:vim8
+ let cmd = join(map(copy(a:cmd), 'plug#shellescape(v:val, {"script": 0})'))
+ if has_key(a:opts, 'dir')
+ let cmd = s:with_cd(cmd, a:opts.dir, 0)
+ endif
+ let argv = s:is_win ? ['cmd', '/s', '/c', '"'.cmd.'"'] : ['sh', '-c', cmd]
let jid = job_start(s:is_win ? join(argv, ' ') : argv, {
\ 'out_cb': function('s:job_cb', ['s:job_out_cb', job]),
+ \ 'err_cb': function('s:job_cb', ['s:job_out_cb', job]),
\ 'exit_cb': function('s:job_cb', ['s:job_exit_cb', job]),
+ \ 'err_mode': 'raw',
\ 'out_mode': 'raw'
\})
if job_status(jid) == 'run'
@@ -1304,7 +1435,7 @@ function! s:spawn(name, cmd, opts)
let job.lines = ['Failed to start job']
endif
else
- let job.lines = s:lines(call('s:system', [cmd]))
+ let job.lines = s:lines(call('s:system', has_key(a:opts, 'dir') ? [a:cmd, a:opts.dir] : [a:cmd]))
let job.error = v:shell_error != 0
let job.running = 0
endif
@@ -1401,8 +1532,14 @@ while 1 " Without TCO, Vim stack is bound to explode
let [error, _] = s:git_validate(spec, 0)
if empty(error)
if pull
- let fetch_opt = (has_tag && !empty(globpath(spec.dir, '.git/shallow'))) ? '--depth 99999999' : ''
- call s:spawn(name, printf('git fetch %s %s 2>&1', fetch_opt, prog), { 'dir': spec.dir })
+ let cmd = ['git', 'fetch']
+ if has_tag && !empty(globpath(spec.dir, '.git/shallow'))
+ call extend(cmd, ['--depth', '99999999'])
+ endif
+ if !empty(prog)
+ call add(cmd, prog)
+ endif
+ call s:spawn(name, cmd, { 'dir': spec.dir })
else
let s:jobs[name] = { 'running': 0, 'lines': ['Already installed'], 'error': 0 }
endif
@@ -1410,12 +1547,14 @@ while 1 " Without TCO, Vim stack is bound to explode
let s:jobs[name] = { 'running': 0, 'lines': s:lines(error), 'error': 1 }
endif
else
- call s:spawn(name,
- \ printf('git clone %s %s %s %s 2>&1',
- \ has_tag ? '' : s:clone_opt,
- \ prog,
- \ plug#shellescape(spec.uri, {'script': 0}),
- \ plug#shellescape(s:trim(spec.dir), {'script': 0})), { 'new': 1 })
+ let cmd = ['git', 'clone']
+ if !has_tag
+ call extend(cmd, s:clone_opt)
+ endif
+ if !empty(prog)
+ call add(cmd, prog)
+ endif
+ call s:spawn(name, extend(cmd, [spec.uri, s:trim(spec.dir)]), { 'new': 1 })
endif
if !s:jobs[name].running
@@ -1452,7 +1591,7 @@ G_NVIM = vim.eval("has('nvim')") == '1'
G_PULL = vim.eval('s:update.pull') == '1'
G_RETRIES = int(vim.eval('get(g:, "plug_retries", 2)')) + 1
G_TIMEOUT = int(vim.eval('get(g:, "plug_timeout", 60)'))
-G_CLONE_OPT = vim.eval('s:clone_opt')
+G_CLONE_OPT = ' '.join(vim.eval('s:clone_opt'))
G_PROGRESS = vim.eval('s:progress_opt(1)')
G_LOG_PROB = 1.0 / int(vim.eval('s:update.threads'))
G_STOP = thr.Event()
@@ -1989,7 +2128,7 @@ function! s:update_ruby()
end
} if VIM::evaluate('s:mac_gui') == 1
- clone_opt = VIM::evaluate('s:clone_opt')
+ clone_opt = VIM::evaluate('s:clone_opt').join(' ')
progress = VIM::evaluate('s:progress_opt(1)')
nthr.times do
mtx.synchronize do
@@ -2055,13 +2194,29 @@ function! s:shellesc_sh(arg)
return "'".substitute(a:arg, "'", "'\\\\''", 'g')."'"
endfunction
+" Escape the shell argument based on the shell.
+" Vim and Neovim's shellescape() are insufficient.
+" 1. shellslash determines whether to use single/double quotes.
+" Double-quote escaping is fragile for cmd.exe.
+" 2. It does not work for powershell.
+" 3. It does not work for *sh shells if the command is executed
+" via cmd.exe (ie. cmd.exe /c sh -c command command_args)
+" 4. It does not support batchfile syntax.
+"
+" Accepts an optional dictionary with the following keys:
+" - shell: same as Vim/Neovim 'shell' option.
+" If unset, fallback to 'cmd.exe' on Windows or 'sh'.
+" - script: If truthy and shell is cmd.exe, escape for batchfile syntax.
function! plug#shellescape(arg, ...)
+ if a:arg =~# '^[A-Za-z0-9_/:.-]\+$'
+ return a:arg
+ endif
let opts = a:0 > 0 && type(a:1) == s:TYPE.dict ? a:1 : {}
let shell = get(opts, 'shell', s:is_win ? 'cmd.exe' : 'sh')
let script = get(opts, 'script', 1)
- if shell =~# 'cmd\.exe'
+ if shell =~# 'cmd\(\.exe\)\?$'
return s:shellesc_cmd(a:arg, script)
- elseif shell =~# 'powershell\.exe' || shell =~# 'pwsh$'
+ elseif shell =~# 'powershell\(\.exe\)\?$' || shell =~# 'pwsh$'
return s:shellesc_ps1(a:arg)
endif
return s:shellesc_sh(a:arg)
@@ -2105,8 +2260,24 @@ function! s:system(cmd, ...)
let batchfile = ''
try
let [sh, shellcmdflag, shrd] = s:chsh(1)
- let cmd = a:0 > 0 ? s:with_cd(a:cmd, a:1) : a:cmd
- if s:is_win
+ if type(a:cmd) == s:TYPE.list
+ " Neovim's system() supports list argument to bypass the shell
+ " but it cannot set the working directory for the command.
+ " Assume that the command does not rely on the shell.
+ if has('nvim') && a:0 == 0
+ return system(a:cmd)
+ endif
+ let cmd = join(map(copy(a:cmd), 'plug#shellescape(v:val, {"shell": &shell, "script": 0})'))
+ if &shell =~# 'powershell\(\.exe\)\?$'
+ let cmd = '& ' . cmd
+ endif
+ else
+ let cmd = a:cmd
+ endif
+ if a:0 > 0
+ let cmd = s:with_cd(cmd, a:1, type(a:cmd) != s:TYPE.list)
+ endif
+ if s:is_win && type(a:cmd) != s:TYPE.list
let [batchfile, cmd] = s:batchfile(cmd)
endif
return system(cmd)
@@ -2126,18 +2297,17 @@ endfunction
function! s:git_validate(spec, check_branch)
let err = ''
if isdirectory(a:spec.dir)
- let result = s:lines(s:system('git rev-parse --abbrev-ref HEAD 2>&1 && git config -f .git/config remote.origin.url', a:spec.dir))
+ let result = [s:git_local_branch(a:spec.dir), s:git_origin_url(a:spec.dir)]
let remote = result[-1]
- if v:shell_error
+ if empty(remote)
let err = join([remote, 'PlugClean required.'], "\n")
elseif !s:compare_git_uri(remote, a:spec.uri)
let err = join(['Invalid URI: '.remote,
\ 'Expected: '.a:spec.uri,
\ 'PlugClean required.'], "\n")
elseif a:check_branch && has_key(a:spec, 'commit')
- let result = s:lines(s:system('git rev-parse HEAD 2>&1', a:spec.dir))
- let sha = result[-1]
- if v:shell_error
+ let sha = s:git_revision(a:spec.dir)
+ if empty(sha)
let err = join(add(result, 'PlugClean required.'), "\n")
elseif !s:hash_match(sha, a:spec.commit)
let err = join([printf('Invalid HEAD (expected: %s, actual: %s)',
@@ -2145,8 +2315,9 @@ function! s:git_validate(spec, check_branch)
\ 'PlugUpdate required.'], "\n")
endif
elseif a:check_branch
- let branch = result[0]
+ let current_branch = result[0]
" Check tag
+ let origin_branch = s:git_origin_branch(a:spec)
if has_key(a:spec, 'tag')
let tag = s:system_chomp('git describe --exact-match --tags HEAD 2>&1', a:spec.dir)
if a:spec.tag !=# tag && a:spec.tag !~ '\*'
@@ -2154,25 +2325,26 @@ function! s:git_validate(spec, check_branch)
\ (empty(tag) ? 'N/A' : tag), a:spec.tag)
endif
" Check branch
- elseif a:spec.branch !=# branch
+ elseif origin_branch !=# current_branch
let err = printf('Invalid branch: %s (expected: %s). Try PlugUpdate.',
- \ branch, a:spec.branch)
+ \ current_branch, origin_branch)
endif
if empty(err)
- let [ahead, behind] = split(s:lastline(s:system(printf(
- \ 'git rev-list --count --left-right HEAD...origin/%s',
- \ a:spec.branch), a:spec.dir)), '\t')
+ let [ahead, behind] = split(s:lastline(s:system([
+ \ 'git', 'rev-list', '--count', '--left-right',
+ \ printf('HEAD...origin/%s', origin_branch)
+ \ ], a:spec.dir)), '\t')
if !v:shell_error && ahead
if behind
" Only mention PlugClean if diverged, otherwise it's likely to be
" pushable (and probably not that messed up).
let err = printf(
\ "Diverged from origin/%s (%d commit(s) ahead and %d commit(s) behind!\n"
- \ .'Backup local changes and run PlugClean and PlugUpdate to reinstall it.', a:spec.branch, ahead, behind)
+ \ .'Backup local changes and run PlugClean and PlugUpdate to reinstall it.', origin_branch, ahead, behind)
else
let err = printf("Ahead of origin/%s by %d commit(s).\n"
\ .'Cannot update until local changes are pushed.',
- \ a:spec.branch, ahead)
+ \ origin_branch, ahead)
endif
endif
endif
@@ -2185,7 +2357,9 @@ endfunction
function! s:rm_rf(dir)
if isdirectory(a:dir)
- call s:system((s:is_win ? 'rmdir /S /Q ' : 'rm -rf ') . plug#shellescape(a:dir))
+ return s:system(s:is_win
+ \ ? 'rmdir /S /Q '.plug#shellescape(a:dir)
+ \ : ['rm', '-rf', a:dir])
endif
endfunction
@@ -2267,6 +2441,7 @@ endfunction
function! s:delete(range, force)
let [l1, l2] = a:range
let force = a:force
+ let err_count = 0
while l1 <= l2
let line = getline(l1)
if line =~ '^- ' && isdirectory(line[2:])
@@ -2275,11 +2450,22 @@ function! s:delete(range, force)
let answer = force ? 1 : s:ask('Delete '.line[2:].'?', 1)
let force = force || answer > 1
if answer
- call s:rm_rf(line[2:])
+ let err = s:rm_rf(line[2:])
setlocal modifiable
- call setline(l1, '~'.line[1:])
- let s:clean_count += 1
- call setline(4, printf('Removed %d directories.', s:clean_count))
+ if empty(err)
+ call setline(l1, '~'.line[1:])
+ let s:clean_count += 1
+ else
+ delete _
+ call append(l1 - 1, s:format_message('x', line[1:], err))
+ let l2 += len(s:lines(err))
+ let err_count += 1
+ endif
+ let msg = printf('Removed %d directories.', s:clean_count)
+ if err_count > 0
+ let msg .= printf(' Failed to remove %d directories.', err_count)
+ endif
+ call setline(4, msg)
setlocal nomodifiable
endif
endif
@@ -2294,7 +2480,7 @@ function! s:upgrade()
let new = tmp . '/plug.vim'
try
- let out = s:system(printf('git clone --depth 1 %s %s', plug#shellescape(s:plug_src), plug#shellescape(tmp)))
+ let out = s:system(['git', 'clone', '--depth', '1', s:plug_src, tmp])
if v:shell_error
return s:err('Error upgrading vim-plug: '. out)
endif
@@ -2488,18 +2674,23 @@ function! s:diff()
endif
call s:append_ul(2, origin ? 'Pending updates:' : 'Last update:')
for [k, v] in plugs
- let range = origin ? '..origin/'.v.branch : 'HEAD@{1}..'
- let cmd = 'git log --graph --color=never '
- \ . (s:git_version_requirement(2, 10, 0) ? '--no-show-signature ' : '')
- \ . join(map(['--pretty=format:%x01%h%x01%d%x01%s%x01%cr', range], 'plug#shellescape(v:val)'))
- if has_key(v, 'rtp')
- let cmd .= ' -- '.plug#shellescape(v.rtp)
- endif
- let diff = s:system_chomp(cmd, v.dir)
- if !empty(diff)
- let ref = has_key(v, 'tag') ? (' (tag: '.v.tag.')') : has_key(v, 'commit') ? (' '.v.commit) : ''
- call append(5, extend(['', '- '.k.':'.ref], map(s:lines(diff), 's:format_git_log(v:val)')))
- let cnts[origin] += 1
+ let branch = s:git_origin_branch(v)
+ if len(branch)
+ let range = origin ? '..origin/'.branch : 'HEAD@{1}..'
+ let cmd = ['git', 'log', '--graph', '--color=never']
+ if s:git_version_requirement(2, 10, 0)
+ call add(cmd, '--no-show-signature')
+ endif
+ call extend(cmd, ['--pretty=format:%x01%h%x01%d%x01%s%x01%cr', range])
+ if has_key(v, 'rtp')
+ call extend(cmd, ['--', v.rtp])
+ endif
+ let diff = s:system_chomp(cmd, v.dir)
+ if !empty(diff)
+ let ref = has_key(v, 'tag') ? (' (tag: '.v.tag.')') : has_key(v, 'commit') ? (' '.v.commit) : ''
+ call append(5, extend(['', '- '.k.':'.ref], map(s:lines(diff), 's:format_git_log(v:val)')))
+ let cnts[origin] += 1
+ endif
endif
let bar .= '='
call s:progress_bar(2, bar, len(total))
@@ -2561,7 +2752,7 @@ function! s:snapshot(force, ...) abort
let names = sort(keys(filter(copy(g:plugs),
\'has_key(v:val, "uri") && !has_key(v:val, "commit") && isdirectory(v:val.dir)')))
for name in reverse(names)
- let sha = s:system_chomp('git rev-parse --short HEAD', g:plugs[name].dir)
+ let sha = s:git_revision(g:plugs[name].dir)
if !empty(sha)
call append(anchor, printf("silent! let g:plugs['%s'].commit = '%s'", name, sha))
redraw
diff --git a/nvim/autoload/plug.vim.old b/nvim/autoload/plug.vim.old
@@ -99,7 +99,13 @@ let s:mac_gui = has('gui_macvim') && has('gui_running')
let s:is_win = has('win32')
let s:nvim = has('nvim-0.2') || (has('nvim') && exists('*jobwait') && !s:is_win)
let s:vim8 = has('patch-8.0.0039') && exists('*job_start')
-let s:me = resolve(expand('<sfile>:p'))
+if s:is_win && &shellslash
+ set noshellslash
+ let s:me = resolve(expand('<sfile>:p'))
+ set shellslash
+else
+ let s:me = resolve(expand('<sfile>:p'))
+endif
let s:base_spec = { 'branch': 'master', 'frozen': 0 }
let s:TYPE = {
\ 'string': type(''),
@@ -110,10 +116,42 @@ let s:TYPE = {
let s:loaded = get(s:, 'loaded', {})
let s:triggers = get(s:, 'triggers', {})
+if s:is_win
+ function! s:plug_call(fn, ...)
+ let shellslash = &shellslash
+ try
+ set noshellslash
+ return call(a:fn, a:000)
+ finally
+ let &shellslash = shellslash
+ endtry
+ endfunction
+else
+ function! s:plug_call(fn, ...)
+ return call(a:fn, a:000)
+ endfunction
+endif
+
+function! s:plug_getcwd()
+ return s:plug_call('getcwd')
+endfunction
+
+function! s:plug_fnamemodify(fname, mods)
+ return s:plug_call('fnamemodify', a:fname, a:mods)
+endfunction
+
+function! s:plug_expand(fmt)
+ return s:plug_call('expand', a:fmt, 1)
+endfunction
+
+function! s:plug_tempname()
+ return s:plug_call('tempname')
+endfunction
+
function! plug#begin(...)
if a:0 > 0
let s:plug_home_org = a:1
- let home = s:path(fnamemodify(expand(a:1), ':p'))
+ let home = s:path(s:plug_fnamemodify(s:plug_expand(a:1), ':p'))
elseif exists('g:plug_home')
let home = s:path(g:plug_home)
elseif !empty(&rtp)
@@ -121,7 +159,7 @@ function! plug#begin(...)
else
return s:err('Unable to determine plug home. Try calling plug#begin() with a path argument.')
endif
- if fnamemodify(home, ':t') ==# 'plugin' && fnamemodify(home, ':h') ==# s:first_rtp
+ if s:plug_fnamemodify(home, ':t') ==# 'plugin' && s:plug_fnamemodify(home, ':h') ==# s:first_rtp
return s:err('Invalid plug home. '.home.' is a standard Vim runtime path and is not allowed.')
endif
@@ -139,6 +177,16 @@ function! s:define_commands()
if !executable('git')
return s:err('`git` executable not found. Most commands will not be available. To suppress this message, prepend `silent!` to `call plug#begin(...)`.')
endif
+ if has('win32')
+ \ && &shellslash
+ \ && (&shell =~# 'cmd\.exe' || &shell =~# 'powershell\.exe')
+ return s:err('vim-plug does not support shell, ' . &shell . ', when shellslash is set.')
+ endif
+ if !has('nvim')
+ \ && (has('win32') || has('win32unix'))
+ \ && !has('multi_byte')
+ return s:err('Vim needs +multi_byte feature on Windows to run shell commands. Enable +iconv for best results.')
+ endif
command! -nargs=* -bar -bang -complete=customlist,s:names PlugInstall call s:install(<bang>0, [<f-args>])
command! -nargs=* -bar -bang -complete=customlist,s:names PlugUpdate call s:update(<bang>0, [<f-args>])
command! -nargs=0 -bar -bang PlugClean call s:clean(<bang>0)
@@ -353,24 +401,25 @@ if s:is_win
" Copied from fzf
function! s:wrap_cmds(cmds)
- let use_chcp = executable('sed')
- return map([
+ let cmds = [
\ '@echo off',
\ 'setlocal enabledelayedexpansion']
- \ + (use_chcp ? [
- \ 'for /f "usebackq" %%a in (`chcp ^| sed "s/[^0-9]//gp"`) do set origchcp=%%a',
- \ 'chcp 65001 > nul'] : [])
\ + (type(a:cmds) == type([]) ? a:cmds : [a:cmds])
- \ + (use_chcp ? ['chcp !origchcp! > nul'] : [])
- \ + ['endlocal'],
- \ 'v:val."\r"')
+ \ + ['endlocal']
+ if has('iconv')
+ if !exists('s:codepage')
+ let s:codepage = libcallnr('kernel32.dll', 'GetACP', 0)
+ endif
+ return map(cmds, printf('iconv(v:val."\r", "%s", "cp%d")', &encoding, s:codepage))
+ endif
+ return map(cmds, 'v:val."\r"')
endfunction
function! s:batchfile(cmd)
- let batchfile = tempname().'.bat'
+ let batchfile = s:plug_tempname().'.bat'
call writefile(s:wrap_cmds(a:cmd), batchfile)
- let cmd = plug#shellescape(batchfile, {'shell': &shell, 'script': 1})
- if &shell =~# 'powershell\.exe$'
+ let cmd = plug#shellescape(batchfile, {'shell': &shell, 'script': 0})
+ if &shell =~# 'powershell\.exe'
let cmd = '& ' . cmd
endif
return [batchfile, cmd]
@@ -575,7 +624,7 @@ function! plug#(repo, ...)
try
let repo = s:trim(a:repo)
let opts = a:0 == 1 ? s:parse_options(a:1) : s:base_spec
- let name = get(opts, 'as', fnamemodify(repo, ':t:s?\.git$??'))
+ let name = get(opts, 'as', s:plug_fnamemodify(repo, ':t:s?\.git$??'))
let spec = extend(s:infer_properties(name, repo), opts)
if !has_key(g:plugs, name)
call add(g:plugs_order, name)
@@ -595,7 +644,7 @@ function! s:parse_options(arg)
elseif type == s:TYPE.dict
call extend(opts, a:arg)
if has_key(opts, 'dir')
- let opts.dir = s:dirpath(expand(opts.dir))
+ let opts.dir = s:dirpath(s:plug_expand(opts.dir))
endif
else
throw 'Invalid argument type (expected: string or dictionary)'
@@ -606,7 +655,7 @@ endfunction
function! s:infer_properties(name, repo)
let repo = a:repo
if s:is_local_plug(repo)
- return { 'dir': s:dirpath(expand(repo)) }
+ return { 'dir': s:dirpath(s:plug_expand(repo)) }
else
if repo =~ ':'
let uri = repo
@@ -759,7 +808,7 @@ function! s:finish_bindings()
endfunction
function! s:prepare(...)
- if empty(getcwd())
+ if empty(s:plug_getcwd())
throw 'Invalid current working directory. Cannot proceed.'
endif
@@ -915,7 +964,7 @@ function! s:checkout(spec)
let output = s:system('git rev-parse HEAD', a:spec.dir)
if !v:shell_error && !s:hash_match(sha, s:lines(output)[0])
let output = s:system(
- \ 'git fetch --depth 999999 && git checkout '.s:esc(sha).' --', a:spec.dir)
+ \ 'git fetch --depth 999999 && git checkout '.plug#shellescape(sha).' --', a:spec.dir)
endif
return output
endfunction
@@ -1120,12 +1169,12 @@ function! s:update_finish()
endif
endif
call s:log4(name, 'Checking out '.tag)
- let out = s:system('git checkout -q '.s:esc(tag).' -- 2>&1', spec.dir)
+ let out = s:system('git checkout -q '.plug#shellescape(tag).' -- 2>&1', spec.dir)
else
- let branch = s:esc(get(spec, 'branch', 'master'))
- call s:log4(name, 'Merging origin/'.branch)
- let out = s:system('git checkout -q '.branch.' -- 2>&1'
- \. (has_key(s:update.new, name) ? '' : ('&& git merge --ff-only origin/'.branch.' 2>&1')), spec.dir)
+ let branch = get(spec, 'branch', 'master')
+ call s:log4(name, 'Merging origin/'.s:esc(branch))
+ let out = s:system('git checkout -q '.plug#shellescape(branch).' -- 2>&1'
+ \. (has_key(s:update.new, name) ? '' : ('&& git merge --ff-only '.plug#shellescape('origin/'.branch).' 2>&1')), spec.dir)
endif
if !v:shell_error && filereadable(spec.dir.'/.gitmodules') &&
\ (s:update.force || has_key(s:update.new, name) || s:is_updated(spec.dir))
@@ -1169,7 +1218,7 @@ function! s:job_abort()
silent! call job_stop(j.jobid)
endif
if j.new
- call s:system('rm -rf ' . plug#shellescape(g:plugs[name].dir))
+ call s:rm_rf(g:plugs[name].dir)
endif
endfor
let s:jobs = {}
@@ -1232,7 +1281,7 @@ function! s:spawn(name, cmd, opts)
\ 'on_stdout': function('s:nvim_cb'),
\ 'on_exit': function('s:nvim_cb'),
\ })
- let jid = jobstart(argv, job)
+ let jid = s:plug_call('jobstart', argv, job)
if jid > 0
let job.jobid = jid
else
@@ -1289,9 +1338,10 @@ function! s:bar()
endfunction
function! s:logpos(name)
- for i in range(4, line('$'))
+ let max = line('$')
+ for i in range(4, max > 4 ? max : 4)
if getline(i) =~# '^[-+x*] '.a:name.':'
- for j in range(i + 1, line('$'))
+ for j in range(i + 1, max > 5 ? max : 5)
if getline(j) !~ '^ '
return [i, j - 1]
endif
@@ -2001,16 +2051,20 @@ function! s:shellesc_ps1(arg)
return "'".substitute(escape(a:arg, '\"'), "'", "''", 'g')."'"
endfunction
+function! s:shellesc_sh(arg)
+ return "'".substitute(a:arg, "'", "'\\\\''", 'g')."'"
+endfunction
+
function! plug#shellescape(arg, ...)
let opts = a:0 > 0 && type(a:1) == s:TYPE.dict ? a:1 : {}
let shell = get(opts, 'shell', s:is_win ? 'cmd.exe' : 'sh')
let script = get(opts, 'script', 1)
- if shell =~# 'cmd\.exe$'
+ if shell =~# 'cmd\.exe'
return s:shellesc_cmd(a:arg, script)
- elseif shell =~# 'powershell\.exe$' || shell =~# 'pwsh$'
+ elseif shell =~# 'powershell\.exe' || shell =~# 'pwsh$'
return s:shellesc_ps1(a:arg)
endif
- return shellescape(a:arg)
+ return s:shellesc_sh(a:arg)
endfunction
function! s:glob_dir(path)
@@ -2163,7 +2217,7 @@ function! s:clean(force)
let allowed = {}
for dir in dirs
- let allowed[s:dirpath(fnamemodify(dir, ':h:h'))] = 1
+ let allowed[s:dirpath(s:plug_fnamemodify(dir, ':h:h'))] = 1
let allowed[dir] = 1
for child in s:glob_dir(dir)
let allowed[child] = 1
@@ -2236,7 +2290,7 @@ endfunction
function! s:upgrade()
echo 'Downloading the latest version of vim-plug'
redraw
- let tmp = tempname()
+ let tmp = s:plug_tempname()
let new = tmp . '/plug.vim'
try
@@ -2435,7 +2489,9 @@ function! s:diff()
call s:append_ul(2, origin ? 'Pending updates:' : 'Last update:')
for [k, v] in plugs
let range = origin ? '..origin/'.v.branch : 'HEAD@{1}..'
- let cmd = 'git log --graph --color=never '.join(map(['--pretty=format:%x01%h%x01%d%x01%s%x01%cr', range], 'plug#shellescape(v:val)'))
+ let cmd = 'git log --graph --color=never '
+ \ . (s:git_version_requirement(2, 10, 0) ? '--no-show-signature ' : '')
+ \ . join(map(['--pretty=format:%x01%h%x01%d%x01%s%x01%cr', range], 'plug#shellescape(v:val)'))
if has_key(v, 'rtp')
let cmd .= ' -- '.plug#shellescape(v.rtp)
endif
@@ -2485,7 +2541,7 @@ function! s:revert()
return
endif
- call s:system('git reset --hard HEAD@{1} && git checkout '.s:esc(g:plugs[name].branch).' --', g:plugs[name].dir)
+ call s:system('git reset --hard HEAD@{1} && git checkout '.plug#shellescape(g:plugs[name].branch).' --', g:plugs[name].dir)
setlocal modifiable
normal! "_dap
setlocal nomodifiable
@@ -2513,7 +2569,7 @@ function! s:snapshot(force, ...) abort
endfor
if a:0 > 0
- let fn = expand(a:1)
+ let fn = s:plug_expand(a:1)
if filereadable(fn) && !(a:force || s:ask(a:1.' already exists. Overwrite?'))
return
endif
diff --git a/nvim/init.vim b/nvim/init.vim
@@ -23,7 +23,8 @@ call plug#begin('~/.config/nvim/plugged')
Plug 'frazrepo/vim-rainbow'
Plug 'iamcco/markdown-preview.nvim', { 'do': { -> mkdp#util#install() } }
- Plug 'ap/vim-css-color', { 'for': [ 'css', 'scss' ] }
+ Plug 'neoclide/coc.nvim', {'branch': 'release'}
+ " Plug 'ap/vim-css-color', { 'for': [ 'css', 'scss' ] }
" theming
syntax on
@@ -108,13 +109,6 @@ nnoremap <leader>n :NnnPicker %:p:h<CR>
map <C-k> <C-w>k
map <C-l> <C-w>l
-" Splits open at the bottom and right.
- set splitbelow splitright
-
-" shortcut split opening
- nnoremap <leader>h :split<Space>
- nnoremap <leader>v :vsplit<Space>
-
" Alt-hjkl to resize splits
noremap <A-h> :vertical resize -5<CR>
noremap <A-l> :vertical resize +5<CR>
@@ -124,6 +118,7 @@ nnoremap <leader>n :NnnPicker %:p:h<CR>
" Ctrl maps for buffers
map <C-b> :buffers<CR>
map <C-Up> :bnext<CR>
+ map <C-n> :bnext<CR>
map <C-Down> :bprevious<CR>
" run Black with F9
@@ -249,3 +244,6 @@ nnoremap <leader>n :NnnPicker %:p:h<CR>
let g:citation_vim_cache_path='~/.config/nvim/cache'
let g:citation_vim_description_format = "{} ┃ {} ┃ {} ┃ {} ┃ {}"
let g:citation_vim_description_fields = ["key","author","publication","journal","doi"]
+
+ " coc
+source $HOME/.config/nvim/plugins/coc.vim
diff --git a/nvim/plugins/coc.vim b/nvim/plugins/coc.vim
@@ -0,0 +1,129 @@
+" Some servers have issues with backup files, see #649.
+set nobackup
+set nowritebackup
+
+" Having longer updatetime (default is 4000 ms = 4 s) leads to noticeable
+" delays and poor user experience.
+set updatetime=300
+
+" Don't pass messages to |ins-completion-menu|.
+set shortmess+=c
+
+" Always show the signcolumn, otherwise it would shift the text each time
+" diagnostics appear/become resolved.
+if has("patch-8.1.1564")
+ " Recently vim can merge signcolumn and number column into one
+ set signcolumn=number
+else
+ set signcolumn=yes
+endif
+
+" Use tab for trigger completion with characters ahead and navigate.
+" NOTE: Use command ':verbose imap <tab>' to make sure tab is not mapped by
+" other plugin before putting this into your config.
+inoremap <silent><expr> <TAB>
+ \ pumvisible() ? "\<C-n>" :
+ \ <SID>check_back_space() ? "\<TAB>" :
+ \ coc#refresh()
+inoremap <expr><S-TAB> pumvisible() ? "\<C-p>" : "\<C-h>"
+
+function! s:check_back_space() abort
+ let col = col('.') - 1
+ return !col || getline('.')[col - 1] =~# '\s'
+endfunction
+
+" Use <c-space> to trigger completion.
+if has('nvim')
+ inoremap <silent><expr> <c-space> coc#refresh()
+else
+ inoremap <silent><expr> <c-@> coc#refresh()
+endif
+
+" Make <CR> auto-select the first completion item and notify coc.nvim to
+" format on enter, <cr> could be remapped by other vim plugin
+inoremap <silent><expr> <cr> pumvisible() ? coc#_select_confirm()
+ \: "\<C-g>u\<CR>\<c-r>=coc#on_enter()\<CR>"
+
+" Use `[g` and `]g` to navigate diagnostics
+" Use `:CocDiagnostics` to get all diagnostics of current buffer in location list.
+nmap <silent> [g <Plug>(coc-diagnostic-prev)
+nmap <silent> ]g <Plug>(coc-diagnostic-next)
+
+" GoTo code navigation.
+nmap <silent> gd <Plug>(coc-definition)
+nmap <silent> gy <Plug>(coc-type-definition)
+nmap <silent> gi <Plug>(coc-implementation)
+nmap <silent> gr <Plug>(coc-references)
+
+" Use K to show documentation in preview window.
+nnoremap <silent> K :call <SID>show_documentation()<CR>
+
+function! s:show_documentation()
+ if (index(['vim','help'], &filetype) >= 0)
+ execute 'h '.expand('<cword>')
+ elseif (coc#rpc#ready())
+ call CocActionAsync('doHover')
+ else
+ execute '!' . &keywordprg . " " . expand('<cword>')
+ endif
+endfunction
+
+" Highlight the symbol and its references when holding the cursor.
+autocmd CursorHold * silent call CocActionAsync('highlight')
+
+" Symbol renaming.
+nmap <leader>rn <Plug>(coc-rename)
+
+" Formatting selected code.
+xmap <leader>f <Plug>(coc-format-selected)
+nmap <leader>f <Plug>(coc-format-selected)
+
+augroup mygroup
+ autocmd!
+ " Setup formatexpr specified filetype(s).
+ autocmd FileType typescript,json setl formatexpr=CocAction('formatSelected')
+ " Update signature help on jump placeholder.
+ autocmd User CocJumpPlaceholder call CocActionAsync('showSignatureHelp')
+augroup end
+
+" Applying codeAction to the selected region.
+" Example: `<leader>aap` for current paragraph
+xmap <leader>a <Plug>(coc-codeaction-selected)
+nmap <leader>a <Plug>(coc-codeaction-selected)
+
+" Remap keys for applying codeAction to the current buffer.
+nmap <leader>ac <Plug>(coc-codeaction)
+" Apply AutoFix to problem on the current line.
+nmap <leader>qf <Plug>(coc-fix-current)
+
+" Add `:Format` command to format current buffer.
+command! -nargs=0 Format :call CocAction('format')
+
+" Add `:Fold` command to fold current buffer.
+command! -nargs=? Fold :call CocAction('fold', <f-args>)
+
+" Add `:OR` command for organize imports of the current buffer.
+command! -nargs=0 OR :call CocAction('runCommand', 'editor.action.organizeImport')
+
+" Add (Neo)Vim's native statusline support.
+" NOTE: Please see `:h coc-status` for integrations with external plugins that
+" provide custom statusline: lightline.vim, vim-airline.
+set statusline^=%{coc#status()}%{get(b:,'coc_current_function','')}
+
+" Mappings for CoCList
+" Show all diagnostics.
+nnoremap <silent><nowait> <space>a :<C-u>CocList diagnostics<cr>
+" Manage extensions.
+nnoremap <silent><nowait> <space>e :<C-u>CocList extensions<cr>
+" Show commands.
+nnoremap <silent><nowait> <space>c :<C-u>CocList commands<cr>
+" Find symbol of current document.
+nnoremap <silent><nowait> <space>o :<C-u>CocList outline<cr>
+" Search workspace symbols.
+nnoremap <silent><nowait> <space>s :<C-u>CocList -I symbols<cr>
+" Do default action for next item.
+nnoremap <silent><nowait> <space>j :<C-u>CocNext<CR>
+" Do default action for previous item.
+nnoremap <silent><nowait> <space>k :<C-u>CocPrev<CR>
+" Resume latest coc list.
+nnoremap <silent><nowait> <space>p :<C-u>CocListResume<CR>
diff --git a/zsh/.zshrc b/zsh/.zshrc
@@ -117,6 +117,9 @@ source /usr/share/zsh/plugins/zsh-you-should-use/you-should-use.plugin.zsh 2>/de
# Search repos for programs that can't be found
source /usr/share/doc/pkgfile/command-not-found.zsh 2>/dev/null
+# fix dircolors for Selenized
+export LS_COLORS="$LS_COLORS:ow=1;7;34:st=30;44:su=30;41"
+
SPACESHIP_PROMPT_ADD_NEWLINE=false
SPACESHIP_PROMPT_SEPARATE_LINE=false
SPACESHIP_CHAR_SYMBOL=
@@ -157,3 +160,4 @@ SPACESHIP_JOBS_SHOW=false
# Spaceship Prompt
autoload -U promptinit; promptinit
prompt spaceship
+