BanditHijo.dev

Menonaktifkan URL Escaping di ZSH (Oh-My-ZSH)

Created at: 2020-10-25
Author by: BanditHijo

Latar Belakang Masalah

Apa sih maksudnya “URL escaping”?

Ketika saya mengcopy sebuah URL dari YouTube dan mempaste di Terminal saya.

Bentuk dari URL berubah seperti ini:

https://www.youtube.com/watch\?v\=Q5eDxR7bU2k

Perhatikan, terdapat tanda \ (backslash) pada sebelum karakter ? dan =.

Sebenarnya ini adalah fitur dari oh-my-zsh, apabila kita melakukan copy paste terhadap nama atau path dari sebuah file ke Terminal yang menggunakan oh-my-zsh agar path dapat dikenali sebagai path dan tidak terjadi error.

Namun sebaliknya, pada kondisi seperti kasus saya di atas, saya tidak menginginkan URL path yang saya miliki diberikan “escape character”.

Pemecahan Masalah

Kalau di Oh-My-ZSH function ini dikenal dengan nama url-quote-magic.

Menurut beberapa GitHub issue yang sudah di closed, saya mendapati beberapa solusi seperti ini.

1. Enable DISABLE_MAGIC_FUNCTIONS

Tambahkan pada file ~/.zshrc.

$HOME/.zshrc
1# ~/.zshrc
2
3...
4...
5
6DISABLE_MAGIC_FUNCTIONS = true

Simpan, dan source kembali.

$ source $ZSH/oh-my-zsh.sh
$ exec $SHELL

Namun, saya tidak berhasil dengan cara ini.

2. Commenting url-quote-magic function on lib

Biar cepat, saya melakukan cara yang tidak elegant.

Saya mencari library yang berisi url-quote-magic function.

Ternyata berlokasi di:

$HOME/.oh-my-zsh/lib/misc.zsh

Namun, untuk teman-teman yang menggunakan plugin seperti saya (ZGEN), maka lokasinya akan tergantung dari plugin tersebut.

$HOME/.zgen/robbyrussell/oh-my-zsh-master/lib/misc.zsh

Kemudian, buka dan commenting blok kode yang berkaitan dengan url-quote-magic.

~/.zgen/robbyrussell/oh-my-zsh-master/lib/misc.zsh
1autoload -Uz is-at-least
2
3# *-magic is known buggy in some versions; disable if so
4# if [[ $DISABLE_MAGIC_FUNCTIONS != true ]]; then
5# for d in $fpath; do
6# if [[ -e "$d/url-quote-magic" ]]; then
7# if is-at-least 5.1; then
8# autoload -Uz bracketed-paste-magic
9# zle -N bracketed-paste bracketed-paste-magic
10# fi
11# autoload -Uz url-quote-magic
12# zle -N self-insert url-quote-magic
13# break
14# fi
15# done
16# fi
17
18## jobs
19setopt long_list_jobs
20
21env_default 'PAGER' 'less'
22env_default 'LESS' '-R'
23
24## super user alias
25alias _='sudo '
26
27## more intelligent acking for ubuntu users
28if (( $+commands[ack-grep] )); then
29 alias afind='ack-grep -il'
30else
31 alias afind='ack -il'
32fi
33
34# recognize comments
35setopt interactivecomments

Perhatikan pada baris ke 4-16, adalah baris yang saya commenting.

Sip, kalau sudah bisa reload lagi $SHELL.

$ source $ZSH/oh-my-zsh.sh
$ exec $SHELL

Kalau berhasil, seharusnya saat kita mempaste URL di Terminal, sudah tidak lagi diberikan escape character.

https://www.youtube.com/watch?v=Q5eDxR7bU2k

Pesan Penulis

Sepertinya, segini dulu yang dapat saya tuliskan.

Mudah-mudahan dapat bermanfaat.

Terima kasih.

(^_^)

Referensi

  1. github.com/ohmyzsh/ohmyzsh/issues/7632 - Disable url escaping in quotes strings
    Diakses tanggal: 2020/10/25