بسم الله الرحمن الرحيم

Prakata

Latar belakang dari ditulisnya post ini adalah, untuk menyempurnakan post sebelumnya dengan judul yang sama.

Berkat pertanyaan dari Nabil, saya memikirkan kembali script untuk Keyboard Shortcut Helper ini.

gambar_1

Kalau kita lihat pada command di atas, saya menggunakan script bernama help-script-browser.sh untuk menyeleksi file dan membukanya.

gambar_2

Cara ini sangat tidak praktis.

Alhamdulillahnya terpikirlah cara untuk menggunakan dmenu saja.

gambar_3

Dengan begini, akan lebih sederhana dan singkat proses pemanggilan plain text yang berisi Keyboard Shortcut Helper.

Ide ini terinspirasi dari script st-urlopener yang digunakan untuk mengambil url pada screen terminal yang terlihat.

Proses Pembuatan

Sekenarionya akan seperti ini.

  1. Membuat script dmenu untuk memilih plain text untuk ditampilkan
  2. Membuat plain text berisi keyboard shortcut yang akan dipanggil oleh dmenu

Langsung saja kita eksekusi.

Pembuatan Script

Langsung saja tanpa bertele-tele.

  1. Buat file script boleh pada direktori ~/.local/bin/ atau pada direktori /usr/bin/ dengan nama sembarang saja, tapi berkorelasi.

    Saya akan memberi nama keybind-helper.

    $ sudo touch /usr/bin/keybind-helper
    $ sudo chmod +x /usr/bin/keybind-helper
  2. Edit file script tersebut dengan text editor favorit kalian.

    $ sudo vim /usr/bin/keybind-helper
  3. Isikan, kira-kira seperti contoh di bawah ini.

    #!/bin/env sh
    pilihan="BSPWM\nMPV\nST\nTMUX\nVIM"
    terpilih=$(echo -e "$pilihan" | dmenu -i -p KEYBINDS:)
    case "$terpilih" in
            BSPWM) dunstify "$terpilih KEYBINDS:" "`tail -n 55 $HOME/.config/rofi-help/keybinds-bspwm`" ;;
            MPV)   dunstify "$terpilih KEYBINDS:" "`tail -n 55 $HOME/.config/rofi-help/keybinds-mpv`" ;;
            ST)    dunstify "$terpilih KEYBINDS:" "`tail -n 55 $HOME/.config/rofi-help/keybinds-st`" ;;
            TMUX)  dunstify "$terpilih KEYBINDS:" "`tail -n 55 $HOME/.config/rofi-help/keybinds-tmux`" ;;
            VIM)   dunstify "$terpilih KEYBINDS:" "`tail -n 55 $HOME/.config/rofi-help/keybinds-vim`" ;;
    esac
    

    Sesuaikan saja dengan jumlah aplikasi yang ingin kalian buatkan keybind-nya.

    Seperti contoh di atas, saya baru membuat 5 aplikasi.

    Perhatikan bagian ini,

    tail -n 55 $HOME/.config/rofi-help/keybinds-bspwm

    Pada bagian yang saya marking adalah bagian dimana saya meletakkan plain text berisi keyboard shortcut.

    Sesuaikan dengan lokasi dimana kalian menyimpan plain text tersebut.

    Nilai 55 adalah maksimal banyaknya jumlah baris yang di tampilkan.

  4. Apabila ingin menambahkan pilihan yang lain, cukup menambahkan pada variabel pilihan=.

    pilihan="BSPWM\nMPV\nST\nTMUX\nVIM\nTAMBAHAN"

    Dan juga case nya.

    case "$terpilih" in
         BSPWM) ...
         MPV) ...
         ST) ...
         TMUX) ...
         VIM) ...
         TAMBAHAN) ... 
    esac
  5. Contoh di atas, apabila teman-teman menggunakan dmenu.

    Untuk yang ingin menggunakan Rofi, tinggal tambahkan saja seperti ini pada variabel terpilih=.

    terpilih=$(echo -e "$pilihan" | rofi -dmenu -i -p KEYBINDS:)

Dengan begini proses pembuatan script telah selesai.

Kita akan lanjut membuat plain text yang berisi keyboard shortcut.

Pembuatan Plain Text

Seperti yang sedikit sudah saya singgung pada section di atas.

Perhatikan lagi bagian ini,

$ tail -n 55 $HOME/.config/rofi-help/keybinds-bspwm

Pada bagian yang saya marking adalah bagian dimana saya meletakkan plain text berisi keyboard shortcut.

Sesuaikan dengan lokasi dimana kalian menyimpan plain text tersebut.

Tidak harus sama seperti saya.

Misalkan kalian membuat direktori khusus pada Home dan memberi nama ~/.keybind-helper/ kemudian baru mengisikan plain text di dalamnya.

Bebas saja.

Saya akan mencontohkan salah satu isi dari plain text yang berisi keyboard shortcut yang saya gunakan.

Dalam hal ini adalah keyboard shortcut untuk BSPWM.

Saya memberikan nama file keybinds-bspwm.

<b>LAUNCHER---------------------------------------</b>
mod+Enter            Terminal
mod+Shift+End        Sessions Dialog
mod+q                Close Window Focus
mod+Shift+x          Lock Screen
mod+Shift+q          Kill Window Focus
mod+d                Rofi: App Launcher
mod+F10              Rofi: Help
mod+{p,Shift+p}      Rofi: Clipboard Show/Clear
mod+Print            Screenshot Silently
mod+Shift+Print      Screenshot GUI
mod+F8               Rofi: NetworkManager_dmenu
mod+{F9/Shift+F9}    Polybar Tray Show/Hide
<b>STATE------------------------------------------</b>
mod+t                State: Tiled []=
mod+Shift+t          State: Pseudo Tiled [T]=
mod+m                State: Monocle [M]=
mod+s                State: Floating []=
mod+f                State: Fullscreen []=&lt;&gt;&lt;
mod+n                Blank Space (Receptacle)
<b>FLAGS------------------------------------------</b>
mod+Ctrl+m           Flags: Marked [*]
mod+Ctrl+x           Flags: Locked [X]
mod+Ctrl+y           Flags: Sticky [Y]
mod+Ctrl+z           Flags: Private [Z]
<b>NODE-------------------------------------------</b>
mod+{c,Shift+c}      Change Focus Next/Previous
mod+a                Focus Parent
mod+b                Focus Brother
mod+,                Focus First
mod+.                Focus Second
mod+Tab              Focus Last Node/Dekstop
mod+{o,i}            Focus Old/New Node/Dekstop
mod+{u,Shift+u}      Rotate +90/-90
mod+{Shift+-,-}      Node Hide/Show
mod+Space            Balance Split Ratio
mod+Shift+Space      Equalize Split Ratio
mod+F1               Move Focus Node to eDP1
mod+F2               Move Focus Node to HDMI2
<b>PRESELECT--------------------------------------</b>
mod+Ctrl+{hjkl}      Preselect Direction
mod+Ctrl+{1-9}       Preselect Ratio
mod+Ctrl+Space       Preselect Dismissed
<b>RESIZE/MOVE------------------------------------</b>
mod+Alt+{hjkl}       Expand Outward
mod+Alt+Shift+{hjkl} Expand Inward
mod+ArrowKeys        Move Floating Window 10px
mod+Shift+ArrowKeys  Move Floating Window 1px

Apabila teman-teman perhatikan, tampilan di atas tidak benar-benar plain text.

Karena saya mengatur Dunst untuk dapat merender kode HTML.

Kalau teman-teman lihat pada konfigurasi Dunst yang ini.

# Possible values are:
# full: Allow a small subset of html markup in notifications:
#        <b>bold</b>
#        <i>italic</i>
#        <s>strikethrough</s>
#        <u>underline</u>
#
#        For a complete reference see
#        <http://developer.gnome.org/pango/stable/PangoMarkupFormat.html>.
#
# strip: This setting is provided for compatibility with some broken
#        clients that send markup even though it's not enabled on the
#        server. Dunst will try to strip the markup but the parsing is
#        simplistic so using this option outside of matching rules for
#        specific applications *IS GREATLY DISCOURAGED*.
#
# no:    Disable markup parsing, incoming notifications will be treated as
#        plain text. Dunst will not advertise that it has the body-markup
#        capability if this is set as a global setting.
#
# It's important to note that markup inside the format option will be parsed
# regardless of what this is set to.
markup = full

Tujuannya agar tampilan notifikasi lebih dinamis, cetak tebal dan normal.

Kalian bisa perhatikan seperti pada bagian di bawah ini yang saya gunakan untuk menampilkan tulisan bercetak tebal.

<b>LAUNCHER---------------------------------------</b>

Kemudian, karena tag-tag HTML akan di-render oleh Dunst, mungkin teman-teman akan kesulitan apabila menggunakan tanda lebih besar > atau lebih kecil <.

Contohnya seperti di bawah ini.

Saya bermaksud menampilkan,

mod+f                State: Fullscreen []=<><

Sedangkan tanda-tanda <>< tersebut merupakan tanda dari tag HTML. Hal ini pasti akan menyebabkan gagal dirender dengan benar.

Untuk mengatasinya, kita ganti dengan simbol alternatif entitas HTML.

mod+f                State: Fullscreen []=&lt;&gt;&lt;

Nah, sekarang tinggal teman-teman racik sendiri keyboard shortcut untuk aplikasi yang lain yang teman-teman ingin buatkan notifikasi pengingatnya.

Hasilnya

Kalau sekenario di atas sudah teman-teman selesaikan, hasilnya akan seperti ini.

Rofi

gambar_4


dmenu

gambar_5

Tinggal kita pasangkan pemanggilannya pada keyboard shortcut pada Window Manager masing-masing.

Contohnya seperti pada BSPWM yang saya gunakan.

$ vim ~/.config/sxhkd/sxhkdrc
FILE$HOME/.config/sxhkd/sxhkdrc
1
2
3
4
5
6
# ...
# ...

# keybind helper
super + F10
    /usr/bin/keybind-helper

Untuk teman-teman yang menggunakan Window Manager atau Desktop Environment yang lain, silahkan menyesuaikan sendiri yaa.

Sepertinya seperti ini saja.

Terima kasih untuk Nabil yang sudah menginspirasi untuk memperbaiki pola kerja dari pengingat keyboard shortcut ini.

Terima kasih sudah mampir kawan.

Referensi

  1. github.com/thomas154/st-urlopener/blob/master/urlopener
    Diakses tanggal: 2019/06/17


Penulis

bandithijo

My journey kicks off from reading textbooks as a former Medical Student to digging bugs as a Software Engineer – a delightful rollercoaster of career twists. Embracing failure with the grace of a Cat avoiding water, I've seamlessly transitioned from Stethoscope to Keyboard. Armed with ability for learning and adapting faster than a Heart Beat, I'm on a mission to turn Code into a Product.

- Rizqi Nur Assyaufi

dccdf58fd8b5291092f9298491df3aa00affca3f