From: Skullheadx Date: Wed, 29 Apr 2026 04:18:06 +0000 (-0400) Subject: surf browser hist and bmarks X-Git-Url: http://git.skullheadx.com/links.html?a=commitdiff_plain;h=2ce192e089ddac76b798a011d4be3d5f826fb8cf;p=nixos.git surf browser hist and bmarks --- diff --git a/dotfiles/surf/surf.sh b/dotfiles/surf/surf.sh new file mode 100644 index 0000000..df3ad64 --- /dev/null +++ b/dotfiles/surf/surf.sh @@ -0,0 +1,130 @@ +#!/bin/sh +# v. 2.0 - upgrade based on surf 4.0 +# Creative Commons License. Peter John Hartman (http://individual.utoronto.ca/peterjh) +# Much thanks to nibble and pancake who have a different surf.sh script available which +# doesn't do the history bit. +# +# this script does: +# * stores history of: (1) successful uri entries; (2) certain smart prefix entries, e.g., "g foobar"; (3) find entries +# * direct bookmark (via ^b) +# * information debug (via ^I) +# * smart prefixes e.g. g for google search, t for tinyurl, etc. +# * delete (with smart prefix x) +# +# $1 = $xid +# $2 = $p = _SURF_FIND _SURF_BMARK _SURF_URI (what SETPROP sets in config.h) +# +# // replace default setprop with this one +# #define SETPROP(p) { .v = (char *[]){ "/bin/sh", "-c", "surf.sh $0 $1 $2", p, q, winid, NULL } } +# +# { MODKEY, GDK_b, spawn, SETPROP("_SURF_BMARK") }, +# { MODKEY|GDK_SHIFT_MASK, GDK_i, spawn, SETPROP("_SURF_INFO") }, +# { MODKEY|GDK_SHIFT_MASK, GDK_g, spawn, SETPROP("_SURF_URI_RAW") }, +font='Terminus:size=12' +normbgcolor='#181818' +normfgcolor='#e9e9e9' +selbgcolor=$normbgcolor +selfgcolor='#dd6003' + +bmarks="$HOME/.local/share/surf/history.txt" +ffile="$HOME/.local/share/find.txt" + +mkdir -p "$HOME/.local/share/surf" + + +pid=$1 +fid=$2 +xid=$3 + +echo "DEBUG: pid=$pid fid=$fid xid=$xid" >> /tmp/surf_debug.log + +dmenu="@dmenu@/bin/dmenu -nb $normbgcolor -nf $normfgcolor \ + -sb $selbgcolor -sf $selfgcolor" +xprop="@xprop@/bin/xprop" +sed="@gnused@/bin/sed" +tac="@coreutils@/bin/tac" + +s_get_prop() { # xprop + xprop -id $xid $1 | cut -d '"' -f 2 +} +s_set_prop() { # xprop value + [ -n "$2" ] && xprop -id $xid -f $1 8u -set $1 "$2" +} +s_write_f() { # file value + [ -n "$2" ] && (sed -i "\|$2|d" $1; echo "$2" >> $1) + #grep "$uri" $bmarks >/dev/null 2>&1 || echo "$uri" >> $bmarks +} +s_set_write_proper_uri() { # uri + # TODO: (xprop -spy _SURF_URI ... | while read name __ value; do echo $value; done works quite nice for eventloops) + # input is whatever the use inputed, so don't store that! + # first, clear the name field because surf doesn't sometimes + #s_set_prop WM_ICON_NAME "" + # set the uri + s_set_prop _SURF_GO "$1" + # get the new name + name=`s_get_prop WM_ICON_NAME` + # loop until the [10%] stuff is finished and we have a load (is this necessary?) + #while echo $name | grep "[*%\]" >/dev/null 2>&1; do + # name=`s_get_prop WM_ICON_NAME` + #done + # bail on error and don't store + #if [[ $name != "Error" ]]; then + # uri=`s_get_prop _SURF_URI` + # store to the bmarks file the OFFICIAL url (with http://whatever) + s_write_f $bmarks "$1" + #grep "$uri" $bmarks >/dev/null 2>&1 || echo "$uri" >> $bmarks + #fi +} + +case "$pid" in +"_SURF_INFO") + xprop -id $xid | sed 's/\t/ /g' | $dmenu -fn "$font" -b -l 20 + ;; +"_SURF_FIND") + find="`tac $ffile 2>/dev/null | $dmenu -fn "$font" -b -p find:`" + s_set_prop _SURF_FIND "$find" + s_write_f $ffile "$find" + ;; +"_SURF_BMARK") + uri=`s_get_prop _SURF_URI` + s_write_f $bmarks "$uri" + ;; +"_SURF_URI_RAW") + uri=`echo $(s_get_prop _SURF_URI) | $dmenu -fn "$font" -b -p "uri:"` + s_set_prop _SURF_GO "$uri" + ;; +"_SURF_URI") + sel=`tac $bmarks 2> /dev/null | $dmenu -fn "$font" -b -l 5 -p "uri [gxy*]:"` + [ -z "$sel" ] && exit + opt=$(echo $sel | cut -d ' ' -f 1) + arg=$(echo $sel | cut -d ' ' -f 2-) + save=0 + case "$opt" in + "g") # google for it + uri="http://www.google.com/search?q=$arg" + save=1 + ;; + "y") # youtube + uri="http://www.youtube.com/results?search_query=$arg&aq=f" + save=1 + ;; + "x") # delete + sed -i "\|$arg|d" $bmarks + exit; + ;; + *) + uri="$sel" + save=2 + ;; + esac + # only set the uri; don't write to file + [ $save -eq 0 ] && s_set_prop _SURF_GO "$uri" + # set the url and write exactly what the user inputed to the file + [ $save -eq 1 ] && (s_set_prop _SURF_GO "$uri"; s_write_f $bmarks "$sel") + # try to set the uri only if it is a success + [ $save -eq 2 ] && s_set_write_proper_uri "$uri" + ;; +*) + echo Unknown xprop + ;; +esac diff --git a/hjem.nix b/hjem.nix index a0d90a9..300ac0a 100644 --- a/hjem.nix +++ b/hjem.nix @@ -39,6 +39,17 @@ lazygit librewolf btop + + (pkgs.writeShellScriptBin "surf.sh" ( + builtins.readFile ( + pkgs.replaceVars ./dotfiles/surf/surf.sh { + dmenu = pkgs.dmenu; + xprop = pkgs.xprop; + gnused = pkgs.gnused; + coreutils = pkgs.coreutils; + } + ) + )) ]; };