1
Exec=ruby -e "key=ARGV.join('+');url='https://man.archlinux.org/search?q='+key;%x(xdg-open #{url})" %U
The AsciiDoc format is a useful presentation format in its own right: AsciiDoc markup is simple, intuitive and as such is easily proofed and edited.
Catatan kali ini, saya akan bermain-main dengan dmenu untuk membuat menu yang dapat digunakan untuk mengakses fitur pencari pada sebuah website sekaligus mem-passing keyword ke dalam halaman pencarian tersebut, sehingga, ketika halaman website terebut terbuka, sudah menampilkan hasil pencarian dari keyword yang diinginkan.
Post ini mungkin merupakan salah satu dari beberapa pendekatan yang saya temukan untuk mencapai tujuan yang sama.
Saya cenderung menggunakan cara yang lebih praktis, yaitu hanya menggunakan dmenu. Catatannya dapat teman-teman baca di sini.
Kali ini, saya menggunakan bantuan Desktop Entry Specification atau biasa dikenal dengan file *.desktop untuk menyimpan masing-masing URL query parameter dari masing-masing website.
Saya memanfaatkan Ruby one line of script (-e
) yang akan dimasukkan ke dalam value dari Exec=
.
Polanya seperti ini,
1
Exec=ruby -e "key=ARGV.join('+');url='https://man.archlinux.org/search?q='+key;%x(xdg-open #{url})" %U
Kalau di-breakdown,
1
2
3
4
5
6
7
8
Exec= (1)
ruby -e (2)
"
key = ARGV.join('+'); (3)
url = 'https://man.archlinux.org/search?q=' + key; (4)
%x(xdg-open #{url}) (5)
"
%U (6)
1 | Merupakan desktop entry keys yang digunakan untuk mengeksekusi perintah menjalankan aplikasi/program |
2 | Merupakan option yang diberikan oleh Ruby interpreter untuk menjalankan sintaks Ruby dalam satu baris |
3 | Pendefinisian variable key yang akan diisi dengan value ARGV dengan array of words. Karena URL parameter tidak mengenal spasi, maka spasi perlu diubah menjadi + menggunakan method join('+') |
4 | Pendefinisian variable url yang akan diisi dengan value URL query parameter dari masing-masing website. Yang valuenya akan diisi dari variabel key . Kemudian digabungkan menggunakan operator + |
5 | %x Adalah method yang disediakan oleh Ruby untuk memanggil system program dan mengembalikan output-nya. #{url} adalah string interpolation yang akan berisi value dari variable key yang akan digunakan sebagai URL parameter oleh xdg-open |
6 | Merupakan desktop entry specification argument yang dapat akan di-passing kepada Exec keys sebagai argument saat mengeksekusi perintah. %U berarti a list of URLs, namun dalam kasus ini, dapat menggunakan %u , %F , atau %f . Argument ini lah yang akan ditangkap oleh ARGV dan disimpan ke dalam variable key |
Kenapa saya menggunakan Ruby? |
Cara pakainya, tinggal panggil dmenu, lalu pilih menu yang sesuai, gunakan Tab untuk auto completion, kemudian masukkan keyword yang diinginkan.
Misal, saya memiliki menu dengan nama Arch:Packages, dan ingin mencari keyword libreoffice still,
DMENU: Arch:Packages libreoffice still
Ketika menekan tombol kbd[:Enter], maka default browser melalui xdg-open
akan membuka halaman Arch Linux Packages dengan menampilkan hasil pencarian dari keyword "libreoffice still".
Cukup praktis, bukan?!
Saya sudah membuat beberapa menu yang sering saya pergunakan. Diantaranya sebagai berikut:
https://man.archlinux.org/search?q=KEYWORD
1
2
3
[Desktop Entry]
Name=Arch:Manpage
Exec=ruby -e "key=ARGV.join('+');url='https://man.archlinux.org/search?q='+key;%x(xdg-open #{url})" %U
https://wiki.archlinux.org/index.php?search=KEYWORD
1
2
3
[Desktop Entry]
Name=Arch:Wiki
Exec=ruby -e "key=ARGV.join('+');url='https://wiki.archlinux.org/index.php?search='+key;%x(xdg-open #{url})" %U
https://archlinux.org/packages/?q=KEYWORD
1
2
3
[Desktop Entry]
Name=Arch:Packages
Exec=ruby -e "key=ARGV.join('+');url='https://archlinux.org/packages/?q='+key;%x(xdg-open #{url})" %U
https://aur.archlinux.org/packages/?K=KEYWORD
1
2
3
[Desktop Entry]
Name=Arch:Packages:AUR
Exec=ruby -e "key=ARGV.join('+');url='https://aur.archlinux.org/packages/?K='+key;%x(xdg-open #{url})" %U
https://duckduckgo.com/?q=KEYWORD
1
2
3
[Desktop Entry]
Name=DuckduckGo:Search
Exec=ruby -e "key=ARGV.join('+');url='https://duckduckgo.com/?q='+key;%x(xdg-open #{url})" %U
https://github.com/search?q=KEYWORD
1
2
3
[Desktop Entry]
Name=GitHub:Search
Exec=ruby -e "key=ARGV.join('+');url='https://github.com/search?q='+key;%x(xdg-open #{url})" %U
https://duckduckgo.com/?q=!g+KEYWORD
1
2
3
[Desktop Entry]
Name=Google:Search
Exec=ruby -e "key=ARGV.join('+');url='https://duckduckgo.com/?q=!g+'+key;%x(xdg-open #{url})" %U
https://duckduckgo.com/?q=!gi+KEYWORD
1
2
3
[Desktop Entry]
Name=Google:Search:Image
Exec=ruby -e "key=ARGV.join('+');url='https://duckduckgo.com/?q=!gi+'+key;%x(xdg-open #{url})" %U
https://translate.google.com/?sl=auto\&tl=id\&text=KEYWORD
Source language sl=auto
: Auto
Translate language tl=id
: Indonesia
1
2
3
[Desktop Entry]
Name=Google:Translate
Exec=ruby -e "key=ARGV.join('+');url='https://translate.google.com/?sl=auto\&tl=id\&text='+key;%x(xdg-open #{url})" %U
https://rubygems.org/gems/KEYWORD
1
2
3
[Desktop Entry]
Name=Ruby:Gems
Exec=ruby -e "gem=ARGV.join('+');url='https://rubygems.org/gems/'+gem;%x(xdg-open #{url})" %U
https://www.ruby-toolbox.com/search?q=KEYWORD
1
2
3
[Desktop Entry]
Name=Ruby:Toolbox
Exec=ruby -e "gem=ARGV.join('+');url='https://www.ruby-toolbox.com/search?q='+gem;%x(xdg-open #{url})" %U
Sepertinya, segini dulu yang dapat saya tuliskan.
Selanjutnya, saya serahkan kepada imajinasi dan kreatifitas teman-teman. Hehe.
Mudah-mudahan dapat bermanfaat.
Terima kasih.
(^_^)
https://specifications.freedesktop.org/desktop-entry-spec/desktop-entry-spec-latest.html
Diakses tanggal: 2021/07/29