移位空间少


9

在现代的网络浏览器和其他带有文本内容的软件中,Space向下或多或少地向下滚动屏幕。ShiftSpace滚动除了以外的一切less

一个人如何ShiftSpace向上滚动less?或者,是否有另一个寻呼机(我唯一的要求是POSIX兼容性)可以完成这项工作?

有人告诉我一些终端模拟器,有些终端UI库(ncurses?)不认识ShiftSpace。那是一个有效的问题吗?


您的PgUp按钮出了什么问题?还不够大吗?
13年

@goldilocks:想要使用Shift-Space 并没有什么错,特别是如果您习惯将其与其他工具一起使用的话。less区分Space和Shift-Space 恰好是不可能的。
基思·汤普森

您可以将终端(仿真器)配置为发送b^B(0x2)<shift-Space>。请注意,b只是在很多键盘配置空格键上方
斯特凡Chazelas

@KeithThompson:我希望是一个友好的吉布。我很同情。我想/普遍使用各种常用工具作为“搜索文本”,但是同时,我对强加过多的电磁学标准还是持谨慎态度,这些标准使得无论如何使用一个(普遍可识别的)击键操作都变得更加容易。有趣的是,在这种情况下,这是一个技术限制(请参见200_success的答案),而不是仅凭草率设计可以解释这一点。
goldilocks 2013年

1
@KeithThompson,请参阅translationsVT100小部件的资源。
斯特凡Chazelas

Answers:


6

我认为您提出了由技术限制引起的文化冲突。由于Shift+ Space生成与相同的输出Space,因此Unix终端模型将它们视为相同。为了区分两者,您需要一个支持按键向上/按键向下事件的编程环境。在X11和支持重新映射键的终端仿真器中,这是可能的。将Shift+ 重新映射Space为的示例PageUp

# For [u]rxvt, in ~/.Xdefaults:
URxvt.keysym.Shift-space: \033[5~

1
大多数终端仿真器都支持重新映射键,因此可以使用大多数终端仿真器来实现(xterm -xrm 'XTerm.VT100.translations: #override Shift <KeyPress> space: string(0x2)'例如,在xterm中,或者您发送与发送时相同的序列<PageUp>)。当然,这会在按住Shift键的同时笨拙地输入文本。
斯特凡Chazelas

1

在终端仿真器中,通过按住Shift键,此功能将破坏键入带有嵌入空格的大写文本。例如,如果要键入“ It's A Title”,则必须在“ A”和“ T”之间释放Shift。按住它会移开光标,并把其余的内容放错位置。我相信这会比您使用向上滚动功能所获得的效果更令人讨厌。

键入文本时具有正常的行为,并且每当Space向下滚动时向上滚动都需要应用程序的重新设计和大量合作(例如,一个应用程序能够切换Shift + Space发送的内容),我敢肯定这不会发生。

关键区别在于,无论您是编辑还是查看内容,GUI应用程序都知道“上下文”,而终端仿真器则无从得知。


1

终端模拟器在Space和发送相同的字符Shift+Space。如果没有,那么在按住Shift键的同时键入文本将变得很尴尬(请参阅@egmont的答案,该答案扩展了该参数)。

但是,您可以通过映射Shift+Space到一系列字符来解决该问题,这些字符序列最终会在默认情况下插入一个空格,并且您可以针对这些字符配置应用程序,例如less在此类按键上向上滚动。

例如,这样的序列可以是` DEL SPC(改变DELBS上系统,其中BS为erase字符)。

对于xterm,添加资源:

XTerm.VT100.translations: #override \
  Shift <KeyPress> space: string("`") string(0x7f) string(" ") 

并配置less

printf '%s\n' '#command' '`\177\40 back-screen' | lesskey -

1

less目前尚不支持此功能,但绝对可以添加

如果程序通过写入终端使用xterm控制序列将其设置 modifyOtherKeys为2 \e[>4;2m,则xterm使用有关哪些修饰键处于活动状态的附加信息为键添加注释。专门针对该Space键,modifyOtherKeys在xterm中处于活动状态时,Shift+ Space变为\e[27;2;32~less必须将其正确解释为Shift+ Space,然后触发向上滚动。

尽管这肯定会在xterm中起作用,但并不是在每个终端应用程序中都起作用。但是那些无法识别此转义序列打开的终端modifyOtherKeys将仅忽略该转义序列,并在按Shift+ 时继续向程序发送正常的空格字符Space

xterm网站上有一个非常详细的页面,解释了如何modifyOtherKeys计算代码:https : //invisible-island.net/xterm/modified-keys.html

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.