问题标签 [xmonad-contrib]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1068 浏览

multiple-monitors - 在 XMonad 的多显示器设置中循环工作区

我目前正在使用alt++和ctrl++在工作区之间循环:leftaltctrlright

这适用于单显示器设置。但是,在使用双显示器设置时会有些混乱。这是因为如果当前在另一个屏幕上可见,要显示的工作区将更改屏幕。例如,如果我在屏幕 0 上有 ws 1,在屏幕 1 上有 ws 2,并且将焦点放在屏幕 0 上:

当我现在执行nextWSws 2 时,当前在屏幕 1 上的将被绘制到屏幕 0,而屏幕 1 将显示 ws 1。

我想要的是一种行为,prexWS它将nextWS跳过当前显示在另一台监视器上的工作区,并且只选择当前未显示的工作区。

是否已经有这样的命令,或者是否有一些xmonad.hs示例可以实现这一点?

0 投票
1 回答
64 浏览

haskell - 如何通过键绑定在 Xmonad 窗口上运行挂钩

我正在寻找一种将doCenterFloat我的管理钩子中的行为复制到键绑定的方法。我想保持窗户“自然”的大小。例如,当我创建一个大小为 800x600 的 OpenGL 窗口时,我必须手动将窗口的标题添加到我的 XMonad 配置中,否则它将被平铺并且窗口的内容将被拉伸。

这是我试图复制到键绑定的代码

上面的代码使窗口正确显示。我已经尝试过切换普通浮动(不是 centerFloat)的功能,但它们以平铺大小显示,例如 Xmonad: Float and resize windows to its “natural size

任何帮助深表感谢

0 投票
0 回答
187 浏览

xmonad - 如何通过 bash 命令/文件从 Xmonad 获取当前工作空间信息?

我需要来自 Xmonad 的有关当前工作区/屏幕的信息。我需要它在外部的 bash 脚本中,以便我可以根据我所在的当前工作区执行一些功能。

我在网上搜索,似乎 dynamicLog 是做到这一点的方法之一。但我无法弄清楚如何将信息从 Xmonad 发送到文件中。我想要做的是让 Xmonad 在某个文件更改时使用当前工作空间信息更新它。

这可以通过 DynamicLogger 完成吗?

我当前的 Xmonad dynamicLog 部分如下:

或者,在网上查看另一种方法,我尝试了类似的方法

...用于实用程序 wmctrl 但它不起作用。它的输出就像 -

感谢您对上述任何内容的任何帮助。

谢谢

0 投票
1 回答
625 浏览

haskell - Pacman 更新后损坏的 XMonad(依赖项)(如何使用 Stack 编译它?)

这个问题是其他人帮助我解决的问题的提炼解决方案。可以在这个问题这个 r/xmonad 帖子上找到讨论。

我主要将 Artix 与 Pacman 一起用作包管理器。今天,大约一周后,我升级了许多软件包,最终破坏了 XMonad。

这是我收到的消息xmonad --recompile -v

我已经尝试了很多人们在互联网上提到的解决方案——到目前为止,我已经花了 3 个多小时尝试调试它——其中值得注意的是:

  • cabal install --lib xmonad-contrib,它解决了我过去在使用 XMonad 时遇到的一些问题。
  • 删除并重新安装 Stack、GHC、Cabal 和 XMonad 本身。
  • 通过 Stack 安装 XMonad。
    • 这最终给了我同样的错误信息,不同的是我必须执行~/.local/bin/xmonad --recompile -v

有谁知道如何解决这个问题?我以前在升级 XMonad 时遇到过问题,但从来没有这样的问题——我喜欢 Haskell 作为一门语言,但它的包管理是我 10 多年来经历过的最恶心、最复杂的软件之一编程生活。

如果我最终清理我的系统并通过 Stack 管理所有内容,我如何通过它编译 XMonad?仅使用 Stack 然后xmonad --recompile给我这个错误:

(顺便说一句,我确实有一个~/.xmonad/build/文件夹......)

0 投票
2 回答
241 浏览

haskell - 在 Xmonad 中为特定窗口配置无边框

目标

在 Xmonad 中为特定窗口设置无边框。

具体例子:我想要firefox并且feh 总是没有边界。我不仅要为特定布局(例如,单个窗口)或特定窗口模式(如浮动)设置它。

尝试A

我最直接的想法是在 中添加一行manageHook,它应该处理窗口创建。所以我在我的自定义中放了一行ManageHook

它编译,但不幸的是,当我开始时没有任何反应firefox

然后我尝试调试它:

  1. 测试了以下,它可以工作(新的firefox窗口浮动),这表明我的自定义ManageHook工作,我的逻辑(修改窗口后跟idHook)应该是可以的。
  1. 通过在XMonad.Actions.NoBorders中尝试测试setWindowBorderWidth功能。做类似的事情。我使用了一个键绑定来调用它并且它有效。因此在创建窗口后的 Xmonad 会话期间运行良好。toggleBordertoggleBordersetWindowBorderWidthtoggleBordersetWindowBorderWidth

  2. 测试了以下内容(在此处找到)但它不起作用,与我的代码相同(尝试 A)。

尝试 B

我在XMonad.Layout.NoBorders这个答案hasBorder中找到了这个函数,但我没有成功。

如果我只放入className =? "firefox" --> hasBorder FalseManageHook不使用layoutHook,则不会发生任何事情。我查看了源代码hasBorder发现它只广播了一条消息,但没有设置边框。我想我可能需要调用layoutHookfromXMonad.Layout.NoBorders来真正设置边界,但我不确定应该使用哪一个。而且我也不确定是否需要指定要使用的任何布局XMonad.Layout.NoBorders

问题

  1. Xmonad 是否设置了边界,ManageHook所以我在尝试 A 中的代码无效?

  2. 如果 Q1 为真,这是否意味着在屏幕上绘制窗口时我只能在LayoutHook(可能使用)处不设置边框?XMonad.Layout.NoBorders

  3. 如果 Q2 为真,我是否需要指定布局以及layoutHook可以使用的布局?

0 投票
1 回答
57 浏览

haskell - 如何使用 IndependentScreens 在监视器 x 上获取工作区列表

我有 2 个不同尺寸的显示器,其中一个是垂直放置的,我希望它们默认有不同的布局

XMonad.Layout.IndependentScreens用来为每个监视器分配它自己的一组工作区

我找到了一个库,可以满足我的需要XMonad.Layout.PerWorkspace

有了这个,我定义了 2 个我将使用的监视器布局:

所以现在我试图在布局挂钩上使用它们,以及来自 IndependentScreens 的 workspacesOn 函数

这失败并出现以下错误:

现在我很困惑,因为该函数在文档中,并且我清楚地包含了对 IndependantStreens 的引用,它在错误消息中

上面的代码有什么问题,我该如何让它工作?

0 投票
0 回答
19 浏览

xmonad - 单个物理屏幕的多个“虚拟屏幕”概念

我使用带有 10 个工作区的单个物理屏幕的 XMonad。我想有两个或更多独立的工作空间实例,有点像单个物理屏幕上的多个“虚拟屏幕”。例如,虚拟屏幕 1 和 2 应该各自独立地拥有自己的工作区,然后我会使用一些键绑定在虚拟屏幕之间切换。

如何实现所需的配置?我偶然发现了XMonad.Layout.IndependentScreens但它并没有真正涵盖我需要的东西。

0 投票
1 回答
61 浏览

haskell - xmonad-contrib Prompt:在特定工作区中执行终端提示?

我最近决定通过 Stack 从源代码构建 XMonad 以进行自定义配置。让我先说我没有大量使用 Haskell 的经验。我的操作系统是 Linux - Arch。

设置

我正在尝试使用XMonad.Promptxmonad-contrib 中的包来启动一些应用程序。(https://hackage.haskell.org/package/xmonad-contrib-0.13/docs/XMonad-Prompt.html

目前,我使用的一个提示是,它使用默认终端中提供的参数XMonad.Prompt.Man启动程序(我默认的终端是 Alacritty)。man(文档:https ://hackage.haskell.org/package/xmonad-contrib-0.13/docs/XMonad-Prompt-Man.html )(来源:https ://hackage.haskell.org/package/xmonad-contrib- 0.13/docs/src/XMonad-Prompt-Man.html )

我不明白的是如何使用此提示将终端启动到工作区 2,我希望在其中打开所有联机帮助页。

提示目前的工作方式:

我在 中设置了一个键绑定xmonad.hs,如下所示:

这可以按照文档所说的方式工作,但是联机帮助页始终在当前工作区中打开,而不是在我希望它们打开的工作区 2 中。

我试过的

因为man在现有终端中打开并且不提供设置窗口名称的选项,所以我最初无法ManageHook用于检测窗口名称并将其转移到正确的工作区,就像我对 Mozilla Firefox 之类的应用程序所做的那样:(https: //hackage.haskell.org/package/xmonad-0.15/docs/XMonad-ManageHook.html )

我尝试使用 Alacritty 的选项将窗口名称设置为硬编码的名称,但这只会在终端生成并且已经在当前布局上调用--title之后才移动终端,导致终端移动到不同的文本对齐方式不正确man具有不同布局的工作区。

我认为适当的解决方案可能需要修改XMonad.Prompt.Man.

查看源代码XMonad.Prompt.Man,我发现这一行可能有助于更改(第 60-63 行):(https://hackage.haskell.org/package/xmonad-contrib-0.13/docs/src/XMonad-Prompt -Man.html )

查看runInTerm(from XMonad.Util.Run) 的源代码,在我看来它需要 2 个字符串 args:第一个是选项列表,""manPrompt(即默认为空白) 的情况下,第二个是要运行的命令,"man "在的情况manPrompt。这些都在默认终端中运行(对我来说是 Alacritty)。(文档:https ://hackage.haskell.org/package/xmonad-contrib-0.16/docs/XMonad-Util-Run.html )(来源:https ://hackage.haskell.org/package/xmonad-contrib- 0.16/docs/src/XMonad.Util.Run.html#runInTerm )

我可以做些什么来修改manPromptrunInTerm指定终端在哪个工作区中manPrompt生成?或者有没有其他人知道实现我不知道的期望行为的方法?

编辑#1

在最近的答案的建议下,我试图修补代码以从manPrompt运行,而不是. (https://hackage.haskell.org/package/xmonad-contrib-0.13/docs/XMonad-Actions-SpawnOn.htmlspawnOnXMonad.Actions.SpawnOnrunInTerm

这是我现在所拥有的:

但是,这不会编译,导致错误:

我认为这个问题是由于我未能正确掌握 Haskell 数据类型,但我不明白......如果调用的正确方法spawnOnspawnOn <workspaceId> <command>,我如何将Stringbash 命令传递给函数<command>,就像上面一样?

编辑#2——解决方案#1

我目前的解决方案是使用一个自定义补丁XMonad.Prompt.ManmanPrompt它看起来像下面这样:

我猜这可以编译并且可以工作,但似乎仍然会导致与在具有不同布局的工作区之间移动终端窗口时spawnOn相同的文本对齐问题。(我在我尝试过doShift的原始帖子中提到了这些。)

为了更好地解释“文本对齐问题”的含义,我在此处添加了一个屏幕截图:https ://ibb.co/vxjcKZh将注意力集中在生成联机帮助页的工作区上,它应该是全屏的,但是您可以看到,文本不会填满整个终端窗口;这是因为该man命令在窗口大小被压缩时运行。)

有没有办法在终端窗口产生后以某种方式刷新终端窗口中的文本?