从 X11 环境禁用 NBSP 字符

从 X11 环境禁用 NBSP 字符

当我使用“alt-gr”字符后跟“空格”字符时,我经常会错过输入“不间断空格字符”(又名 nbsp)来代替它。

管道命令示例:mount |<space>tailvsmount |<nbsp>tail 最后一个命令将触发错误..." tail" command unfindable...(注意命令之前的视觉空间)尾巴命令的名称实际上是一个 nbsp 字符)。

所以我发现一个完美的解决方案就我而言,简单地中和 nbsp 字符:

setxkbmap -option "nbsp:none"

但这种改变会立即影响整个系统,并且为了证明,在 LibreOffice Writer 中,如果我想在必须保持分组的两个单词之间添加一个 nbsp 字符,这是行不通的。

从过去开始,由于那个该死的角色,我花了很多时间来确定不起作用的命令或脚本或服务无法启动的原因。

所以我问自己是否有一个解决方案可以使中和仅限于 shell(控制台、终端、vty、tty 等)?在 bash 或其他 shell 中...

你能告诉我这个该死的 nbsp 角色在 shell 中扮演什么角色吗?在何时何地使用它以及用于什么?不使用它我们会失去什么?

另一个建议:我们可以通过带有颜色的图形字符来显示它,而不是中和它吗?

答案1

作为卡米尔让我意识到 NBSP 功能在近 95% 的时间内都无法为我服务。因此,我可以禁用它,对于剩余的 5%,我将必须实现一个不同的补丁,以允许我为所有需要的应用程序插入此字符。

前言:为了确保谈到同一件事,我想向您介绍 PTS 控制台和 TTY 控制台对我来说的区别。 PTS 对我来说是我们从桌面环境打开的 GUI 控制台(图形),而 TTY 对我来说是我们通过组合打开的 CLI(命令行)Ctrl-Alt-Fn(n代表会话号,一般在1到7之间,7默认保留给X11图形会话)。

从 X11 环境禁用 NBSP 字符

因此,根据我自己的搜索(见上文),我可以从我的 X11 环境中禁用 NBSP 字符。由于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

Libre Office Writer 的重定向 NBSP 快捷键

有时,我需要从 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 unicode 代码是 U+00A0,而且在我的例子中,结果代码写在$HOME/.config/libreoffice/4/user/basic/Standard/Module1.xba

对于按键绑定(工具→自定义...→键盘),我们将使用Ctrl-Shift-空格键与名为的宏函数绑定插入NBSP

注意:在我的例子中,结果关联写在$HOME/.config/libreoffice/4/user/registrymodifications.xcu


显示 vim 中的一些字符(包括 NBSP)

基于此来源我找到了一种方法来揭示所有重要角色vim(这是我最喜欢的文本编辑器)颜色为绿色(在我的例子中)。这在 TTY 控制台中很有用,因为没有什么可以阻止键入 NBSP。

重要提示:取决于我们是否访问 shellPTS或者电传打字机控制台,我们可以使用 unicode 字符(在第一种情况下)或部分使用 unicode 字符(在第二种情况下,但显然可以使 TTY 支持完整的 unicode - 未测试)。

先决条件:在添加以下配置行之前,请确保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

笔记:

  • 标签将显示所有选项卡以区分空格组,并且它们将被替换为大于 (>)
  • 踪迹将显示行末的所有尾随空格,它们将被中间的点 (·) 替换;要输入此 unicode,请参见下文
  • NBSP将显示所有 NBSP 字符,这些字符在大多数情况下没有用(并不是说永远不会),并且它们将被问号(?)
  • 尽管不建议这样做,因为它只能在 PTS 控制台上运行(除非我们设法集成来自 TTY 的完整 unicode 支持),但可以使用一些更有意义或更异国情调的 unicode 字符;例如 tab 可以由 ⇥ 组成,nbsp 由“☠”组成(见下文)

从 PTS 控制台使用 unicode 字符

重要提示:此方法适用于我的配置,但我不知道它是否适用于所有地方

要键入制表符(请参阅下面的其他代码):

  • 从外壳(来源):ctrl-shift-u 21e5

  • 来自 vim (来源):Ctrl-V u 21e5

PTS 中的 Unicode 字符:

从 TTY shell 控制台禁用 NBSP 字符

最后一个未处理的情况是 TTY 控制台。正如@Kamil 建议我的那样可以通过将以下行添加到 $HOME/.bashrc 文件来禁用 NBSP:

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

总结一下

现在我们可以从 X11 禁用 NBSP 字符,PTS bash shell 和vim在 PTS 中setxkbmap -option "nbsp:none"(为了使持久化,我在位于 的自动启动脚本中实现它$HOME/.config/autostart)。我们还可以使用bind '"\302\240":" "'in禁用 TTY bash shell$HOME/.bashrc禁用 TTY bash shell 。可以警告我们使用 NBSP(和其他有问题的字符):vim在 TTY 中,listchars配置在$HOME/.vim/vimrc.最后,我们总是可以在 Libre Office Writer 中添加一些想要的 NBSP 字符(这也取决于 X11,因此 NBSP 被阻止),将 NBSP 快捷键重定向到另一个组合键。

最后,我想说的是,所有不同的环境情况都不会得到处理,但我认为这里所说的是一个很好的起点,可以为其他情况找到一种方法。

相关内容