Работа с символом nbsp в оболочке

В оболочке zshвы можете использовать l:length::string:левый -флаг расширения параметра заполнения.

$ var=FF
$ echo ${(l:4::0:)var}
00FF

Чтобы применить его к каждому слову в файле:

printf '%s\n' ${(l:4::0:)$(<file)}

Обратите внимание, что этот оператор также обрезает слова, длина которых превышает 4 символа.

2
11.09.2021, 10:44
1 ответ

Как Камил заставил меня понять, что функциональность NBSP не будет служить мне почти в 95% случаев. Поэтому я могу отключить его, а для оставшихся 5% мне придется реализовать отдельный патч, позволяющий мне вставлять этот символ для всех приложений, которые мне понадобятся.

Предисловие :Чтобы быть уверенным в том же, я хочу представить вам, в чем для меня разница между консолью PTS и консолью TTY. PTS для меня — это GUI-консоли (графические ), которые мы открываем из среды рабочего стола, а TTY — это для меня CLI (командная строка ), которую мы открываем комбинацией ctrl -alt -Fn(n, представляющий номер сеанса и обычно от 1 до 7, 7 зарезервировано по умолчанию для графического сеанса X11 ).

Отключить символ NBSP из среды X11

Итак, основываясь на моих собственных поисках (см. выше ), я могу отключить символ NBSP в своей среде X11. Поскольку X11 является графической средой, отключение должно выполняться в графической среде.

Так что предлагаю реализовать это в скрипте автостарта (для меня из XFCE DE):

user@host:~$ cat <<EOF > $HOME/.config/autostart/setxkbmap_no_nbsp.desktop
[Desktop Entry]
Encoding=UTF-8
Version=0.9.4
Type=Application
Name=No NBSP
Comment=Disable NBSP key
Exec=/usr/bin/setxkbmap -option "nbsp:none"
OnlyShowIn=XFCE;
StartupNotify=false
Terminal=false
Hidden=false
EOF

Перенаправить ярлык NBSP для Libre Office Writer

Иногда из Libre Office Writer мне нужно вставить символ NBSP, но так как он отключен (см. выше ),Я все еще должен найти способ вставить этот символ.

Я предлагаю использовать Ctrl -Shift -пробел для замены.

Итак, для макроса (Доступно здесь :Инструменты → Макросы → Организовать макросы → LOdev Basic → Мои макросы > Стандартный > Модуль 1 > Редактировать):

REM  *****  BASIC  *****

' Based on : https://ask.libreoffice.org/t/special-characters/1089/3
Sub InsertNBSP
 Dim oDoc as variant
  oDoc = ThisComponent
 Dim oCurrentController as variant
  oCurrentController = oDoc.getCurrentController()
 Dim oTextViewCursor as variant
  oTextViewCursor = oCurrentController.getViewCursor()
 Dim oText as variant
 If IsEmpty(oTextViewCursor.Cell) Then
  oText=oTextViewCursor.Text
 Else
  oText=oTextViewCursor.Cell.Text
 End If
 ' NBSP unicode : https://www.compart.com/en/unicode/U+00A0
 oText.insertString(oTextViewCursor,_
  chr(clng("&H00A0&")),false)
End Sub

Примечание :Обратите внимание, что код юникода NBSP равен U+00A0, и, кроме того, в моем случае результирующий код записывается как$HOME/.config/libreoffice/4/user/basic/Standard/Module1.xba

А для привязки клавиш (Инструменты → Настройка… → Клавиатура )мы будем использовать Ctrl -Shift -пробел для привязки к функции макроса с именем InsertNBSP

Примечание :в моем случае результирующая ассоциация записывается по адресу$HOME/.config/libreoffice/4/user/registrymodifications.xcu


Показать некоторые символы из vim (включая NBSP)

Основываясь на этом источнике я нашел способ показать все важные символы в vim(который является моим текстовым редактором пристрастия )окрашенным в зеленый цвет (в моем случае ). Это полезно в консоли TTY, потому что ничто не мешает набрать NBSP.

Важно :В зависимости от того, заходим ли мы в оболочку из консоли PTS или TTY , мы можем использовать символы Юникода (в первом случае )или частично (во втором случае, но, по-видимому, можно заставить TTY поддерживать полный юникод -не проверенный ).

Обязательное условие :перед добавлением следующих строк конфигурации убедитесь, что vim уже установлен

# See more here : https://vimhelp.org/options.txt.html#%27listchars%27
user@host:~$ mkdir.vim
user@host:~$ echo -e "set list\nset listchars=tab:\>\,trail:·,nbsp:?" >> $HOME/.vim/vimrc

Ноты:

    Вкладка
  • отобразит все вкладки, чтобы различать их с помощью группы пробелов, и они будут заменены на больше, чем (>)
  • след покажет все конечные пробелы в конце строки, и они будут заменены средней точкой (· );для ввода этого юникода см. ниже
  • nbsp будут показаны все символы NBSP, которые будут бесполезны в большинстве случаев (не говоря никогда )и они будут заменены вопросительным знаком (?)
  • хотя это не рекомендуется по причине того, что будет работать только из консоли PTS (если нам не удастся интегрировать полную поддержку юникода из TTY )можно использовать некоторые символы юникода более значимые или экзотические ; например, табуляция может состоять из ⇥ и nbsp из "☠" (см. ниже)

Использовать символ Юникода из консоли PTS

Важно :этот метод работает из моей конфигурации, но я не знаю, работает ли он везде

Чтобы ввести символ табуляции (, см. другие коды ниже):

Символы Unicode из PTS:

Отключить символ NBSP из консоли оболочки TTY

Последним не обработанным случаем является консоль TTY. Как мне подсказал @Kamil , можно отключить NBSP из него, добавив следующие строки в файл $HOME/.bashrc:

user@host:~$ echo -e "bind '\"\302\240\":\" \"'" >> $HOME/.bashrc

В заключение

На данный момент мы можем отключить символ NBSP из X11, а также оболочку PTS bash и vim в PTS с setxkbmap -option "nbsp:none"(, чтобы сделать его постоянным. Я реализую его в сценарии автозапуска, расположенном в$HOME/.config/autostart). Мы также можем отключить оболочку TTY bash с помощью bind '"\302\240":" "'в $HOME/.bashrc.Нас можно предупредить об использовании NBSP (и других проблемных символов )с vim в TTY с конфигурацией listcharsв $HOME/.vim/vimrc. Наконец, мы всегда можем добавить некоторые нужные символы NBSP в Libre Office Writer (, что также зависит от X11, поэтому NBSP предотвращается )при перенаправлении сочетания клавиш NBSP на другую комбинацию клавиш.

В заключение я бы сказал, что все различные случаи среды не рассматриваются, но я думаю, что сказанное здесь является хорошей отправной точкой, чтобы найти способ для других случаев.

1
16.09.2021, 14:03

Теги

Похожие вопросы