serhii.net

In the middle of the desert you can say anything you want

29 Sep 2021

Day 1002

Cherry-picking commits from pycharm

Messed up merging/rebasing branches from branches from branches, but needed to merge literally a couple of commits.

So I created a clean branch from master. Then:

  • Check out the target branch, the one you’re cherry-picking to
  • Open the git log
  • Select the commits you want to cherry-pick, right click, “cherry-pick”
  • Done!

As usual, docs exist1 and are quite readable.

PEP8 max line width of 80 characters

… is the best thing since sliced bread, I was skeptical at first but makes editing code in multiple windows so much better!

Installing python3.8 on Ubuntu 18.04 LTS

  • Needed a third-party PPA2 that has all the newer python versions:
      sudo add-apt-repository ppa:deadsnakes/ppa
      sudo apt install python3.8
      sudo apt install python3.8-dev
    
  • Needed sudo apt-get install python3.8-venv3
  • Needing to reinstall all packages for it, haha.
    • Set up locally a venv38 for this; if I source venv38/bin/activate python3 becomes python3.8 by default.
  • Needed to install

python3.8-dev was added after an error I had4 when installing pycocotools, it didn’t find python.h when building.

Installing python locally

This describes the process well: Install python3.6+ for local user on remote machine without root access - ~/web/logs

The official documentation: 2. Using Python on Unix platforms — Python 3.9.7 documentation

Basically make altinstall is a safer version that doesn’t overwrite system-wide stuff:

make install can overwrite or masquerade the python3 binary. make altinstall is therefore recommended instead of make install since it only installs exec_prefix/bin/pythonversion.

TL;DR:

  • Download the source tarball
  • Then:
    ./configure --prefix=whatever
    make
    make altinstall
    
  • Add the prefix to $PATH:
    export PATH=$PATH:/data/sh/tools/python3.8/bin
    

Hugo auto-reload and CSS

Just now remembered that when doing CSS stuff it’s sometimes cached, and one needs to <Shift-R> or sth similar. Hugo’s automatic reloading reloads the content/templates/…, but not the CSS!

Explains a lot of what happened the last two days.

Hugo Templating

Copypasting from the docu5:

  • Parameters for functions are separated using spaces
  • Dot-notations for methods and fields ({{ .Params.bar }})
  • Things can be grouped via parentheses:
    • {{ if or (isset .Params "alt") (isset .Params "caption") }} Caption {{ end }}
  • A Single Statement Can be Split over Multiple Lines:
    {{ if or 
      (isset .Params "alt") 
      (isset .Params "caption")
    }}
    

Setting directory-specific settings in vim

Given that Hugo’s markdown considers code as part of a bullet-point if it’s indented two spaces more than the *-bulletpoint’s level, and that I have a tabwidth of 4 and tabs everywhere else and two spaces were a pain…

To apply settings only within a specific directory, add this to ~/.vimrc6:

autocmd BufNewFile,BufRead /home/me/ntb/* set tabstop=4 softtabstop=4 shiftwidth=4 expandtab foldmethod=marker

Notably, for me it didn’t work when the path contained a symlink, had to write it explicitly.

Another option from that SO questiont was placing a ~/.vimrc in that directory7, allowing vim to use it by default, and sourcing the usual global one from the first line. Has security implications, may lead to issues with paths/plugins, didn’t try it.

vim tabs and spaces and indentation settings

Looking for indentation stuff for the above lead me here: Tab settings in Vim. Summary: | by Ari Sweedler | Medium

It has this description, copying verbatim:

  • tabstop: display-only, how many spaces does one \t equal visually?
  • shiftwidth: how many spaces does one level of indentation equal? (shifting commands, formatting, behaviour).
  • softtabstop: how much whitespace to add/remove when pressing tab/backspace?
    • Disabled by default; if using tabs - we create as much whitespace as needed to get to the next tabstop
    • but when using spaces for indentation, we don’t want backspace to delete one space, then this is needed
  • expandtab: should pressing <Tab> on the keyboard create spaces or a tab character?

highlight indentation levels in vim, if indentation is done with spaces

Highlighting tab-indents is easy, and I had these settings for that:

set listchars=tab:\:\ 
set listchars+=trail:◦

For spaces it’s harder.

Tried the indentLine plugin8, due to it using the conceal setting I couldn’t see my json-quotes and _ underscores anymore. Setting conceallevel to 1 from 2 helped only for the latter. May get fixed by colorscheme/syntax files with less concealed stuff?

Setting let g:indentLine_concealcursor = '' (by default inc) helps - text is not concealed at all in the cursor line in any of the modes. I see all concealed text and don’t see the guides. I can kinda live with that.

In any case replacing the 's in json is ugly.

Then found this excellent SO answer. set cursorcolumn cursorline highlight the entire column/row where the cursor is. Which is why I want indentation highlighting 99% of the time!

With my newfound vim knowledge, added this to ~/.vimrc:

autocmd filetype python set cursorcolumn cursorline

But this didn’t satisfy me for the dtb and I kept looking.

Then I found vim-indent-guides9 that changes just the background color. Settings I ended up using:

let g:indent_guides_enable_on_vim_startup = 1
let g:indent_guides_auto_colors = 0
let g:indent_guides_start_level = 2
let g:indent_guides_guide_size = 4
" autocmd VimEnter,Colorscheme * :hi IndentGuidesOdd  guibg=darkgrey  ctermbg=233
autocmd VimEnter,Colorscheme * :hi IndentGuidesEven guibg=blue ctermbg=233

ctermbg=233is one of the darkest black-like vim colors, there’s a nice vim colors reference10 online.

At the end, wrapped everything related to DTB and indentst in one nice startup function:

fun! SetDTB()
	set tabstop=4  shiftwidth=2 expandtab 
	foldmethod=marker
	set nocursorline nocursorcolumn 
	let g:indent_guides_auto_colors = 0
	let g:indent_guides_start_level = 1
	let g:indent_guides_guide_size = 1
	autocmd VimEnter,Colorscheme * :hi IndentGuidesEven guibg=blue ctermbg=236
endfu

autocmd BufNewFile,BufRead /home/me/ntb/* :call SetDTB()
Nel mezzo del deserto posso dire tutto quello che voglio.