在Lion上的Safari之类的应用中按Escape键时不要退出全屏


45

在OS X Lion中,按键将ESC退出全屏模式。不幸的是,尤其是在使用Safari时,ESC它被用于其他功能,例如Javascript按键事件处理。我不希望Lion在按Escape键时退出全屏模式,但是我找不到禁用该功能的地方。

我已经知道了键盘快捷键进入/退出全屏模式(Cmd- - )。Ctrl F我想禁用ESC快捷方式。我一直在谷歌搜索,但找不到任何答案。


2
Esc地方有不同的效果(例如,终止执行页面加载)不会退出全屏。
丹尼尔·贝克

@Daniel:但这不一定适用于任何其他功能。这实际上是广泛传播的OS X Lion问题吗?为什么很少有人真正经历过这种情况?
Tamara Wijsman

1
@汤姆如?用户不说,您也不说。我可以想象所有这些功能(例如通过使用事件)在覆盖全屏模式快捷方式时都可以使用,但是如果没有更多示例,我不能肯定地说。
丹尼尔·贝克

10
偶然按下Enter键有许多网页使用ESC关闭模式窗口,例如:ericmmartin.com/projects/simplemodal-demos单击页面上的演示以显示模式窗口。按ESC关闭模式。Safari知道有一个模式窗口,并且不会退出全屏。再次按ESC键,Safari退出全屏模式。我经常按几次ESC键以确保关闭某物。发生这种情况时,我不希望Safari退出全屏模式。已经有一个键盘命令可以退出全屏显示。不应使用ESC。
法迪

1
@dpk请链接到演示网页。由于到目前为止,当我测试它们时,这些示例都没有这个问题,因此,我认为没有步骤可以重现该问题。实际上,上面的Fadi示例与您的评论相矛盾。
丹尼尔·贝克

Answers:


6

对于Web浏览器,并且专门用于具有允许或要求使用Escape键的行为而又不阻止全屏关闭的行为的网站(例如Stack Exchange网站),可以使用以下用户脚本:

// ==UserScript==
// @name           Keep Full Screen
// @namespace     http://superuser.com/q/315949
// @description    Prevents Escape key from leaving full screen.
// @include      http://*
// ==/UserScript==
document.onkeydown = function (evt) {
    if (evt.keyCode == 27) evt.preventDefault();
}

要在浏览器中运行此程序,请为您的浏览器使用任何用户脚本引擎。

  • 对于Safari 5,您可以使用Safari扩展NinjaKit(在GitHub上)。这就是我用的。
  • 对于Chrome,您可以使用其NinjaKit变体。
  • 对于OS X上的任何其他Safari,您都可以使用SIMBL插件GreaseKit。不知道它是什么最新的。

为了方便起见,我将其上传到用户脚本:userscripts.org/scripts/review/178642
coffeejunk 2013年

在Safari for Mavericks上安装此软件有任何经验吗?
Holene 2014年

2
是的,这对我不起作用,在撰写本文时,我处于带有Safari 8.0(10600.1.25)的优胜美地Beta 5中,并在Safari中使用NinjaKit作为用户脚本引擎。退出键一直在全屏显示,对于我来说,这是发生在我进入地址栏并在其中按下Esc时。(在其中编辑文本时,它具有一些有用的功能...)我假设GreaseKit的日期已定为2009年,因此不再起作用,而一个快速的Google似乎表明它不再起作用。有任何想法吗?如此令人沮丧,即使是在Apple自己的操作系统上,也难怪Chrome浏览器是首选的主流浏览器...

@foregon我希望页面事件处理在您位于地址栏中时完全没有效果。
丹尼尔·贝克

与tampermonkey一起使用,还编辑了脚本/响应以支持https://。
托尼

3

OS X固有的大多数情况都接受EscapeCmd-.中止,例如文件对话框,Safari加载,四处拖动元素等。

当然,该列表中显然没有出现的全屏模式


因此,您可以学习按压,Cmd-.而不是Escape完全避免这种情况。或者,您可以教您的计算机为您做到这一点:至少有些理智的解决方案是使用例如ButlerKeystrokes项映射EscapeCmd-.

  • 打开Butler的配置页面
  • 选择任何容器,例如“ 隐藏”,单击+»智能项目»击键
  • 在“ 键”选项卡上,按下Cmd-.以在激活此项目时将其用作结果按键
  • 在“ 触发器”选项卡上,选择“ 热键”输入字段,然后按Escape。忽略基本上表明您疯了的警告。
  • 请记住将“ 终端”添加到“例外”列表中-它完全忽略Escape了全屏显示,但是按Ctrl-.转换为Ctrl-C

在某些情况下,事情会发生错误。将键重新映射为通常等效的键盘快捷键是大锤解决方案。例如,“ 快速查找”不起作用Cmd-.(因此重新映射Escape以关闭文件预览);使用不能再中止Finder中的重命名文件,也不能Escape清除Finder中的选择。

在有限的测试中,我发现没有任何情况Cmd-.实际上会导致按下操作导致执行不良操作,但请注意,这些操作也可能存在。


当然,您可以完全忽略所有这样的Escape按键,但这会失去很多功能……
丹尼尔·贝克

⌘+。在Opera中为我退出全屏模式,所以这是不可行的:(
Andy E

2

您可能的选择包括:

  1. 设置其他功能的替代快捷方式,因为这ESC是操作系统和浏览器保留的。

  2. 调整源代码/汇编程序机器码以重新绑定ESC操作系统和浏览器的键。

  3. 向应用程序开发人员(即Google电子表格)提交错误/功能请求,以使用ESC事件而不是让其通过。

  4. 向Apple提交错误,因为这些应用程序首先出现在这里,并且Apple无故重新利用了密钥。


3
#1我可以落后。#2几乎是嘲讽到笑声。
Peelman 2011年

好吧,您的里程可能会有所不同。
Tamara Wijsman

使用功能Escape通常在菜单栏中不可用,并且Escape不会触发菜单项,这从缺少突出显示包含触发项的菜单栏项的“闪光灯”中可以明显看出。
丹尼尔·贝克

#4向Apple提交错误,因为这些应用程序首先出现在这里,并且Apple无故重新利用了密钥。
2011年

2

我没有找到macOs Sierra和更高版本的答案。所以这就是我解决这个问题的方式。

正如已经建议的那样,我已将ESC重新映射为⌥+ ESC。它可以完成工作,甚至还可以为按键分配一些其他功能。您可以在某些网站上退出全屏视频,但不会中止页面加载。

首先,您需要安装Karabiner-elements才能重新映射键

  1. 安装brew /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
  2. 安装桶 brew tap caskroom/cask
  3. 安装karabiner元素 brew cask install karabiner-elements

我专门针对此问题创建了自定义“复杂修改”。要安装此修改,您必须:

  1. 打开karabiner元素,然后转到“复杂修改”选项卡
  2. 点击“添加规则”按钮,然后点击“从Internet导入更多规则”
  3. 导入修改“在Safari中按ESC时不退出全屏显示”

1

只是为了使描述更加充实。

ESC用于取消拖动,esc用于取消对话框,esc用于拖动时取消移动/复制,esc用于VI中的终端取消编辑命令

因此,有许多用途。奇怪的是,Apple通过ctrl-cmd-F和右上方的图标可以取消全屏模式。

这似乎是在逐个应用程序的基础上进行的。Mail和Safari和其他iLife项目将退出全屏显示。iTunes保持全屏。

Reeder出于全窗口控制的目的而忽略esc,并对该程序进行其他适当的操作。Evernote甚至没有用于窗口控制的cmd-F或ctrl-cmd-F,其图标和esc键也没有。

您似乎无法将esc本身映射到键盘控制面板中的一些无害的废话动作。


1
在Safari中,将Escape键映射到良性函数似乎不是解决方案。无论采取什么措施,它仍然会退出全屏模式。
Peelman 2011年

再次,按Escape取消对话框不会退出全屏
丹尼尔·贝克

按下Escape终端不会退出全屏
丹尼尔·贝克

使用Escape取消拖动不会退出全屏。在发布这些声明之前,您是否尝试过
丹尼尔·贝克

Escape在Reeder中使用例如从文章网页返回RSS项不会退出全屏显示。如果Escape未用于此类操作,则退出全屏显示。其他所有程序一样
丹尼尔·贝克

1

看起来您正在使用JQuery。在这种情况下:

使用keyCode 27监听文档上的keydown事件(keypress和keyup无效),并在事件触发时调用e.preventDefault()

$(document).bind('keydown', function(e) {

    if (e.keyCode === 27) { // Escape key
        e.preventDefault();
        // Other code goes here    
    }

});

在MSO上的相关请求,无需jQuery就可以使用。
丹尼尔·贝克

1

试试看OptionEsc,对我有用。


1
它也不会触发与Escape键相关的操作,例如中止Safari网页加载。
丹尼尔·贝克

1

这与以Opera为目标的@ aditya-srinivasan答案相同

<?xml version="1.0"?>
<root>
    <item>
  <!-- ============================================================ -->
  <appdef>
    <appname>OPERA</appname>
    <equal>com.operasoftware.Opera</equal>
  </appdef>

    <name>Escape to Option + Escape on Opera</name>
    <identifier>private.Opera_escape</identifier> 
    <only>OPERA</only>
    <autogen>__KeyToKey__ KeyCode::ESCAPE, KeyCode::ESCAPE, ModifierFlag::OPTION_L</autogen>
  </item>
  <!-- ============================================================ -->
</root>

在下载的https://pqrs.org/osx/karabiner/index.html.en上查看@ aditya-srinivasan答案


0

我决定esc转到alt/option+ esc。在大多数情况下,这使我脱离了YouTube视频,如果您拥有Squarespace帐户,则可以登录而不会脱离全屏显示。

  • 下载并安装Karabiner
  • 转到最右侧的“其他与卸载”标签。
  • 单击显示“打开private.xml”的按钮。
  • 此处下载private.xml文件
  • 将Finder中的原始“ private.xml”文件替换为下载的文件。瞧!

0

使用BetterTouchTool或KeyboardMaestro或类似的工具将其重新映射Esc到⌥+ Esc


0

在拼命寻找解决方案之后,我将Safari分配到具有Mission Control的单独虚拟桌面。这可以缓解ESC问题,是迄今为止与全屏Safari窗口最好的近似。

如果您隐藏了Dock,则有额外的空间。


0

轻松找到它!具有2个动作的KeyboardMaestro

当按下“ ESC”时,模拟模拟(而不是):-“ CMD+”。-然后也“ ALT+ ESC

两者都需要,因为某些应用程序只对一个订单做出反应(有时不响应,则不可能)->这样,大多数应用程序ESC在上下文中会像“ ” 一样工作,但您永远都不会退出屏幕模式

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.