X-Git-Url: https://iankelling.org/git/?a=blobdiff_plain;f=brc;h=2ffd91cc86fca751dc1ef157c63d36f0f95af6fd;hb=1723d09bec8364d16a156b195fd08b9f62cbc98b;hp=2a81b25fa369f557d373f431d3c56400f61e9707;hpb=9a0f77b0495e6f2643d5646c54b4c99cf3118c67;p=distro-setup diff --git a/brc b/brc index 2a81b25..2ffd91c 100644 --- a/brc +++ b/brc @@ -1,6 +1,25 @@ #!/bin/bash -# Copyright (C) 2019 Ian Kelling -# SPDX-License-Identifier: AGPL-3.0-or-later +# I, Ian Kelling, follow the GNU license recommendations at +# https://www.gnu.org/licenses/license-recommendations.en.html. They +# recommend that small programs, < 300 lines, be licensed under the +# Apache License 2.0. This file contains or is part of one or more small +# programs. If a small program grows beyond 300 lines, I plan to switch +# its license to GPL. + +# Copyright 2024 Ian Kelling + +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at + +# http://www.apache.org/licenses/LICENSE-2.0 + +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + # this gets sourced. shebang is just for file mode detection # Use source ~/.bashrc instead of doing bash -l when running a script @@ -296,6 +315,7 @@ export PROFILE_TASKS_TASK_OUTPUT_LIMIT=100 export LESS=RXij12 export SYSTEMD_LESS=$LESS + export NNN_COLORS=2136 export SL_FILES_DIR=/b/ds/sl/.iank @@ -347,6 +367,9 @@ if [[ $SOE ]]; then fi fi +# go exists here +path-add --ifexists /usr/local/go/bin + mysrc() { local path dir file @@ -870,9 +893,21 @@ khfix() { a() { local x x=$(readlink -nf "${1:-$PWD}") - # yes, its kinda dumb that xclip/xsel cant do this in one invocation - echo -n "$x" | xclip -selection clipboard - echo -n "$x" | xclip + # yes, its kinda dumb that xclip/xsel cant do this in one invocation. + # And, summarizing this: + # https://askubuntu.com/questions/705620/xclip-vs-xsel + # xclip has a few more options. xclip has a bug in tmux / forwarded x sessions. + cbs "$x" +} + +# clipboard a string (into selection & clipboard buffer) +cbs() { + # yes, its kinda dumb that xclip/xsel cant do this in one invocation. + # And, summarizing this: + # https://askubuntu.com/questions/705620/xclip-vs-xsel + # xclip has a few more options. xclip has a bug in tmux / forwarded x sessions. + printf "%s" "$*" | xclip -selection clipboard + printf "%s" "$*" | xclip } # a1 = awk {print $1} @@ -1609,8 +1644,9 @@ gl() { "$@" &> /a/tmp/gtmp g /a/tmp/gtmp } -# g command substitution +# g command substitution. gc() { + # shellcheck disable=SC2046 # i want word splitting for this hackery g $("$@") } @@ -1720,7 +1756,7 @@ go-github-install() { file_prefix=$2 file_suffix=$3 tmp="${file_prefix##*[[:alnum:]]}" - targetf="${file_prefix%$tmp}" + targetf="${file_prefix%"$tmp"}" echo targetf: $targetf github-release-dl "$@" files=(./*) @@ -2429,15 +2465,16 @@ sgu() { sk() { - # disable a warning with: - # shellcheck disable=SC2206 # reasoning - - # see bash-template/style-guide.md for justifications - - local quotes others + # see https://savannah.gnu.org/maintenance/fsf/bash-style-guide/ for justifications + local quotes others ret quotes=2048,2068,2086,2206,2254 others=2029,2032,2033,2054,2164, - shellcheck -W 999 -x -e $quotes,$others "$@" || return $? + shellcheck -W 999 -x -e $quotes,$others "$@" || ret=$? + if (( ret >= 1 )); then + echo "A template comment to disable is now in clipboard. eg: # shellcheck disable=SC2206 # reason" + cbs "# shellcheck disable=SC" + return $ret + fi } # sk with quotes. For checking scripts that we expect to take untrusted # input in order to verify we quoted vars. @@ -2823,7 +2860,7 @@ psoff() { pson() { PROMPT_COMMAND=(prompt-command) if [[ $TERM == *(screen*|xterm*|rxvt*) ]]; then - trap 'settitle "$BASH_COMMAND"' DEBUG + trap 'auto-window-title "$BASH_COMMAND"' DEBUG fi } @@ -3125,6 +3162,12 @@ EOF done } +# note, there is also the tool gron which is meant for this, but +# this is good enough to not bother installing another tool +jq-lines() { + # https://stackoverflow.com/questions/59700329/how-to-print-path-and-key-values-of-json-file-using-jq + jq --stream -r 'select(.[1]|scalars!=null) | "\(.[0]|join(".")): \(.[1]|tojson)"' "$@" +} tsr() { # ts run "$@" |& ts || return $? @@ -3139,9 +3182,13 @@ if $use_color && type -p tput &>/dev/null; then # https://github.com/trapd00r/LS_COLORS # I would like if there was something similar for light. + # https://www.bigsoft.co.uk/blog/2008/04/11/configuring-ls_colors + # change the hard to read turqouise. + # defaults dircolors --print-database. + # the default bold green is too light. # this explains the codes: https://gist.github.com/thomd/7667642 - export LS_COLORS=ex=1 + export LS_COLORS="ex=1:ln=00;31" term_bold="$(tput bold)" term_red="$(tput setaf 1)" @@ -3284,7 +3331,7 @@ if [[ $- == *i* ]]; then fi # make the titlebar be the last command and the current directory. - settitle () { + auto-window-title () { # These are some checks to help ensure we dont set the title at @@ -3309,7 +3356,7 @@ if [[ $- == *i* ]]; then # condition from the screen man page i think. # note: duplicated in tx() if [[ $TERM == *(screen*|xterm*|rxvt*) ]]; then - trap 'settitle "$BASH_COMMAND"' DEBUG + trap 'auto-window-title "$BASH_COMMAND"' DEBUG else trap DEBUG fi