index.md (2443B)
1 Quick searching with dmenu 2 ========================== 3 4 Description 5 ----------- 6 7 Prompts for a query with dmenu and posts it to the selected search engine. 8 The engine is specified by a single-character code that precedes the 9 actual query, e.g. 'w pancakes' would search en.wikipedia.org for the string 10 'pancakes'. This reduces the necessary shell plumbing to a couple of pipes 11 and a case statement. 12 13 Character ugliness in the query is avoided using od and tr. This 14 has worked so far. 15 16 **EDIT:** Replaced xxd with od and eliminated a sed pipe. Replaced cut pipes 17 with sh variable expansion. 18 19 Author 20 ------ 21 22 Wolfgang Corcoran-Mathe 23 24 Installation 25 ------------ 26 27 Copy the following code into an executable file and place it in PATH. Edit 28 surf/config.def.h as described in the header. 29 30 Code 31 ---- 32 33 #!/bin/sh 34 # 35 # surf_qsearch: 36 # Search script for surf. Takes the surf window id as argument. 37 # POSIX compliant and GNU-free, I think. 38 # 39 # Add something like the following to your surf/config.(def.)h, replacing 40 # surf_qsearch with the name of the file you've copied this code into: 41 # 42 # /* Quick searching. */ 43 # #define QSEARCH { \ 44 # .v = (char *[]){"/bin/sh", "-c", "surf_qsearch $0 $1", winid, NULL } \ 45 # } 46 # 47 # Add a keybinding in keys[]: 48 # 49 # { MODKEY, GDK_q, spawn, QSEARCH }, 50 # 51 52 # Get the full query. The 'echo | dmenu' idiom may be a bit of 53 # a hack, but it seems to work. 54 q="$(echo | dmenu)" 55 [ -z "$q" ] && exit 0 56 57 # Extract the engine code. 58 e="${q%% *}" 59 60 # Encode the search string (i.e. the rest of q). xxd was formerly used 61 # here, but xxd is part of vim packages on some systems, whereas od is 62 # ubiquitous. A search script that breaks if someone accidentally removes 63 # vim is stupid. 64 s=$(printf %s "${q#* }" | tr -d '\n' | od -t x1 -An | tr ' ' '%') 65 66 # These are examples. Change as desired. 67 # 's' = startpage.com 68 # 'w' = wikipedia.org 69 # 'a' = wiki.archlinux.org 70 # 'd' = en.wiktionary.org 71 case $e in 72 's') 73 xprop -id $1 -f _SURF_GO 8s -set _SURF_GO "https://startpage.com/do/search?q=${s}" 74 ;; 75 'w') 76 xprop -id $1 -f _SURF_GO 8s -set _SURF_GO "https://en.wikipedia.org/wiki/index.php/Special:Search?search=${s}&go=Go" 77 ;; 78 'a') 79 xprop -id $1 -f _SURF_GO 8s -set _SURF_GO "https://wiki.archlinux.org/index.php/Special:Search?search=${s}&go=Go" 80 ;; 81 'd') 82 xprop -id $1 -f _SURF_GO 8s -set _SURF_GO "https://en.wiktionary.org/w/index.php?search=${s}&go=Go" 83 ;; 84 *) 85 exit 1 86 ;; 87 esac