BanditHijo.dev

dmenu-websearch, Jalan Pintas Pencari Kata yang Praktis

Created at: 2022-08-14
Author by: BanditHijo

Pendahuluan

dmenu-websearch ini saya buat karena kemalasan saya dalam melakukan pencarian kata/frasa tertentu namun harus membuka website terkait. Tidak praktis. Saya ingin kata/frasa tersebut cukup saya inputkan dari menu di desktop kemudian browser akan menuntun saya ke halaman hasil pencarian di website terkait.

Fitur-fitur

dmenu-websearch ini memiliki fitur:

  1. mencari kata/frasa dari target website yang sudah didefinisikan di dalam file urlquery
  2. menambahkan target urlquery baru
  3. menghapus target urlquery yang ada (konfirmasi sebelum dihapus)

Snippet Code

dmenu-websearch script (Bash)

Simpan file dmenu-websearch di PATH direktori.

~/.local/bin/dmenu-websearch
1#!/bin/bash
2
3# Released under MIT License
4
5# Copyright (C) 2021 Rizqi Nur Assyaufi <bandithijo@gmail.com>
6
7# Permission is hereby granted, free of charge, to any person obtaining a copy
8# of this software and associated documentation files (the "Software"), to deal
9# in the Software without restriction, including without limitation the rights
10# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11# copies of the Software, and to permit persons to whom the Software is
12# furnished to do so, subject to the following conditions:
13
14# The above copyright notice and this permission notice shall be included in
15# all copies or substantial portions of the Software.
16
17# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
23# THE SOFTWARE.
24
25# Deps:
26# - dmenu
27# - jq
28
29MENU="dmenu"
30
31FILE="$HOME/.urlquery"
32
33if [ ! -f $FILE ]; then
34 cp urlquery.example $HOME/.urlquery
35fi
36
37FILEOPT=$(cat $FILE)
38
39OPTIONS="
40[
41${FILEOPT}
42[ \"Add:New:Query\", \"\" ],
43[ \"Delete:Query\", \"\" ]
44]
45"
46
47OBJ_LENGTH=$(echo $OPTIONS | jq length)
48OBJ_MENU=$(echo $OPTIONS | jq -r ".[][0]" | $MENU -i -p " WebSearch:")
49OBJ_SELECTED=$(echo $OBJ_MENU | cut -d' ' -f1)
50OBJ_KEYWORDS=$(echo $OBJ_MENU | cut -d' ' -f2- | tr " " "+")
51
52add_query() {
53 PREFIXMENU=$(echo "" | dmenu -p "Add prefix menu:" <&-)
54 if [ ! -z $PREFIXMENU ]; then
55 URLQUERY=$(echo "" | dmenu -p "Add url query:" <&-)
56 echo "[ \"$PREFIXMENU\", \"$URLQUERY\" ]," >> $FILE
57 fi
58 exit
59}
60
61delete_query() {
62 OBJ_MENU=$(echo $OPTIONS | jq -r ".[][0]" | head -n -2 | $MENU -i -p "Delete Menu:")
63 OBJ_SELECTED=$OBJ_MENU
64 if [ ! -z $OBJ_SELECTED ]; then
65 CONFIRM_DELETE=$(echo -e "no\nyes" | dmenu -p "Do you want to delete this url?")
66 if [ $CONFIRM_DELETE = "yes" ]; then
67 sed -i "/$OBJ_SELECTED/d" $FILE
68 fi
69 fi
70 exit
71}
72
73main() {
74 for i in $(seq 0 $((OBJ_LENGTH - 1))); do
75 if [ $OBJ_SELECTED = "Add:New:Query" ]; then
76 add_query
77 fi
78
79 if [ $OBJ_SELECTED = "Delete:Query" ]; then
80 delete_query
81 fi
82
83 if [ $OBJ_SELECTED = $(echo $OPTIONS | jq -r --arg i $i '.[($i|tonumber)][0]') ]; then
84 URLQUERY=$(echo $OPTIONS | jq -r --arg i $i '.[($i|tonumber)][1]')
85 KEYWORDS=$(echo $OBJ_KEYWORDS)
86 xdg-open "${URLQUERY}${KEYWORDS}" 2> /dev/null
87 fi
88 done
89}
90
91main

urlquery (plaintext)

Simpan file .urlquery di HOME direktori.

~/.urlquery
1[ "Arch:Manpage", "https://man.archlinux.org/search?q=" ],
2[ "Arch:Wiki", "https://wiki.archlinux.org/index.php?search=" ],
3[ "Arch:Packages", "https://archlinux.org/packages/?q=" ],
4[ "Arch:Packages:AUR", "https://aur.archlinux.org/packages/?K=" ],
5[ "DuckDuckGo:Search", "https://duckduckgo.com/?q=" ],
6[ "GitHub:Search", "https://github.com/search?q=" ],
7[ "Google:Search", "https://duckduckgo.com/?q=!g+" ],
8[ "Google:Search:Image", "https://duckduckgo.com/?q=!gi+" ],
9[ "Google:Translate", "https://translate.google.com/?sl=auto&tl=id&text=" ],
10[ "Ruby:Gems", "https://rubygems.org/search?query=" ],
11[ "Ruby:Toolbox", "https://www.ruby-toolbox.com/search?q=" ],
12[ "Ruby:LibHunt", "https://ruby.libhunt.com/search?query=" ],
13[ "Twitter:Search", "https://twitter.com/search?q=" ],
14[ "Youtube:Search", "https://www.youtube.com/results?search_query=" ],
15[ "Twitch:Search", "https://www.twitch.tv/search?term=" ],
16[ "NPM:Search", "https://www.npmjs.com/search?q=" ],

Pesan Penulis

Penggunaan lebih lanjut saya serahkan pada imajinasi dan kreatifitas teman-teman.

Terima kasih sudah mampir yaa.

Referensi

  1. http://kb.mozillazine.org/Using_keyword_searches
    Diakses tanggal: 2022/08/14

  2. https://github.com/bandithijo/dmenu-websearch
    Diakses tanggal: 2022/08/14