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

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.

FILE$HOME/.zshrc
1
2
3
4
5
6
# ~/.zshrc

...
...

DISABLE_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.

FILE~/.zgen/robbyrussell/oh-my-zsh-master/lib/misc.zsh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
autoload -Uz is-at-least

# *-magic is known buggy in some versions; disable if so
# if [[ $DISABLE_MAGIC_FUNCTIONS != true ]]; then
#   for d in $fpath; do
#     if [[ -e "$d/url-quote-magic" ]]; then
#       if is-at-least 5.1; then
#         autoload -Uz bracketed-paste-magic
#         zle -N bracketed-paste bracketed-paste-magic
#       fi
#       autoload -Uz url-quote-magic
#       zle -N self-insert url-quote-magic
#     break
#     fi
#   done
# fi

## jobs
setopt long_list_jobs

env_default 'PAGER' 'less'
env_default 'LESS' '-R'

## super user alias
alias _='sudo '

## more intelligent acking for ubuntu users
if (( $+commands[ack-grep] )); then
  alias afind='ack-grep -il'
else
  alias afind='ack -il'
fi

# recognize comments
setopt 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


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

d98d8237fef8f1017d0be931b6e291341cbe6ca8