GNU/Linux >> Belajar Linux >  >> Linux

Apakah mungkin untuk menyorot ruang yang tidak dapat dipecahkan di zsh / terminal?

Penyorotan ini adalah IMHO lebih mudah diimplementasikan di emulator terminal daripada di shell. Dan sebagai keuntungan Anda mendapatkan penyorotan independen dari shell -- jadi bahkan bekerja dengan less dll.Karena Anda baik-baik saja dengan mengganti shell, saya kira Anda juga baik-baik saja dengan beralih ke URxVt.

Sehubungan dengan ekstensi perl urxvt-perls dimungkinkan untuk membuat URL dll. dapat diklik. Namun kita dapat menyalahgunakan fitur ini hanya untuk menggarisbawahi ruang yang tidak dapat dipisahkan.

Konfigurasi dilakukan di ~/.Xdefaults :

URxvt.perl-ext:           default,matcher
URxvt.matcher.button:     2
URxvt.matcher.pattern.0:  (\\240)
URxvt.matcher.launcher.0: /bin/true
  • baris 1 mengaktifkan ekstensi yang sesuai
  • baris 2 mengonfigurasi penggunaan tombol tengah mouse untuk mengeklik ,,hyperlink''
  • baris 3 mendefinisikan regex agar cocok, di sini setiap ruang yang tidak dapat dipecahkan; A0 (hex) = 240 (oct)
  • baris 4 mendefinisikan tindakan, dalam kasus Anda, Anda tidak ingin membuka browser atau program apa pun, jadi /bin/true harus baik-baik saja

Muat ulang ~/.Xdefaults dengan me-restart server X (ini mungkin berlebihan, tapi saya tidak yakin apakah xrdb ~/.Xdefaults sudah cukup...) dan Anda mendapatkan hasil yang diinginkan. Dengan kaca pembesar bahkan dimungkinkan untuk membedakan antara ruang yang tidak dapat dipecahkan dengan garis bawah (perhatikan pergeseran sebesar 1 piksel) ;) :

Berikut ini adalah semacam bukti konsep untuk solusi "backend". Ketahuilah, ini akan merusak banyak hal, yaitu program interaktif seperti man , less dll. (vim mengeluh tapi masih bekerja). Pendekatan ini diposting oleh Atom Smasher di zsh-users mailinglist pada Sabtu, 16 Mei 2009 untuk mewarnai STDERR . Saya mengadopsinya sesuai kebutuhan Anda:

# ## highlight_nbs.zsh ##

zmodload zsh/terminfo zsh/system
autoload colors is-at-least

if [[ "${terminfo[colors]}" -ge 8 ]] { colors }

highlight_nbs() {
  while sysread line
  do
    syswrite "${line//$'\xC2\xA0'/${bg[red]} ${terminfo[sgr0]}}"
  done
}

precmd() { sleep 0 }

## i'm not sure exactly how far back it's safe to go with this
## 4.3.4 works; 4.2.1 hangs.
is-at-least 4.3.4 && exec  > >(highlight_nbs)

Bagian yang sulit adalah exec > >(highlight_nbs) yang memproses keluaran lengkap dari shell pengganti melalui highlight_nbs fungsi. precmd definisi diperlukan untuk menghindari kondisi balapan, jika tidak prompt baru dicetak sebelum output sebenarnya dari perintah yang dieksekusi.

Ini demonya:


Linux
  1. Apa yang Terjadi Pada Ruang Kosong?

  2. Linux – Apakah Mungkin Untuk Mengakses Framebuffer Untuk Menempatkan Piksel Di Layar Dari Baris Perintah?

  3. Bagaimana cara membaca baris kedua hingga terakhir dalam file menggunakan Bash?

  1. Bagaimana cara memeriksa HZ di terminal?

  2. Bagaimana saya bisa mencegah atau menghentikan salin/tempel yang tidak disengaja di terminal?

  3. Bagaimana cara mengubah kursor Terminal dari kotak ke baris?

  1. Terminal mana yang lebih baik:Bash vs Zsh

  2. Ganti Semua Baris Baru Ke Spasi Kecuali Yang Terakhir?

  3. Baris perintah untuk kembali ke GUI setelah Ctrl-Alt-F1?