X-Git-Url: https://iankelling.org/git/?a=blobdiff_plain;f=brc;h=ad99e0ff360f5a7db129e0941a548c6ddcb54c75;hb=12e4748d67a2891d120f0ce7c29c2cf44a6119df;hp=2a81b25fa369f557d373f431d3c56400f61e9707;hpb=9a0f77b0495e6f2643d5646c54b4c99cf3118c67;p=distro-setup diff --git a/brc b/brc index 2a81b25..ad99e0f 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 @@ -347,6 +366,9 @@ if [[ $SOE ]]; then fi fi +# go exists here +path-add --ifexists /usr/local/go/bin + mysrc() { local path dir file @@ -870,9 +892,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 +1643,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 +1755,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 +2464,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 +2859,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 +3161,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 $? @@ -3284,7 +3326,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 +3351,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