• banner-01

Memanfaatkan dmenu sebagai Jalan Pintas Menu Pencari di Web (Desktop Entry Spec)

Table of Contents

  Info

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.

Banyak Jalan Menuju Jogja

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.

dmenu + Desktop Entry Specification

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?
Karena saya terbiasa menggunakan Ruby. Hal ini memberikan saya keuntungan dan kemudahan dalam bermain-main dengan String yang akan digunakan untuk menyimpan URL query parameter.

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:

Arch Linux Manual Pages

https://man.archlinux.org/search?q=KEYWORD
$HOME/.local/share/applications/dmenu-arch-man.desktop
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

Arch Wiki

https://wiki.archlinux.org/index.php?search=KEYWORD
$HOME/.local/share/applications/dmenu-arch-wiki.desktop
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

Arch Linux Packages

https://archlinux.org/packages/?q=KEYWORD
$HOME/.local/share/applications/dmenu-arch-package.desktop
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

Arch Linux AUR Packages

https://aur.archlinux.org/packages/?K=KEYWORD
$HOME/.local/share/applications/dmenu-arch-package-aur.desktop
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
$HOME/.local/share/applications/dmenu-duckduckgo-search.desktop
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
$HOME/.local/share/applications/dmenu-github-search.desktop
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

Google Search (DuckduckGo Shebang)

https://duckduckgo.com/?q=!g+KEYWORD
$HOME/.local/share/applications/dmenu-google-search.desktop
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

Google Image Search (DuckduckGo Shebang)

https://duckduckgo.com/?q=!gi+KEYWORD
$HOME/.local/share/applications/dmenu-google-search-image.desktop
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

Google Translate

https://translate.google.com/?sl=auto\&tl=id\&text=KEYWORD

Source language sl=auto: Auto
Translate language tl=id: Indonesia

$HOME/.local/share/applications/dmenu-google-translate.desktop
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

RubyGems.org

https://rubygems.org/gems/KEYWORD
$HOME/.local/share/applications/dmenu-rubygems.desktop
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

Ruby-Toolbox.com

https://www.ruby-toolbox.com/search?q=KEYWORD
$HOME/.local/share/applications/dmenu-toolbox.desktop
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

Pesan Penulis

Sepertinya, segini dulu yang dapat saya tuliskan.

Selanjutnya, saya serahkan kepada imajinasi dan kreatifitas teman-teman. Hehe.

Mudah-mudahan dapat bermanfaat.

Terima kasih.

(^_^)

***