问题标签 [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.
multiple-monitors - 在 XMonad 的多显示器设置中循环工作区
我目前正在使用alt++和ctrl++在工作区之间循环:leftaltctrlright
这适用于单显示器设置。但是,在使用双显示器设置时会有些混乱。这是因为如果当前在另一个屏幕上可见,要显示的工作区将更改屏幕。例如,如果我在屏幕 0 上有 ws 1,在屏幕 1 上有 ws 2,并且将焦点放在屏幕 0 上:
当我现在执行nextWS
ws 2 时,当前在屏幕 1 上的将被绘制到屏幕 0,而屏幕 1 将显示 ws 1。
我想要的是一种行为,prexWS
它将nextWS
跳过当前显示在另一台监视器上的工作区,并且只选择当前未显示的工作区。
是否已经有这样的命令,或者是否有一些xmonad.hs
示例可以实现这一点?
haskell - 如何通过键绑定在 Xmonad 窗口上运行挂钩
我正在寻找一种将doCenterFloat
我的管理钩子中的行为复制到键绑定的方法。我想保持窗户“自然”的大小。例如,当我创建一个大小为 800x600 的 OpenGL 窗口时,我必须手动将窗口的标题添加到我的 XMonad 配置中,否则它将被平铺并且窗口的内容将被拉伸。
这是我试图复制到键绑定的代码
上面的代码使窗口正确显示。我已经尝试过切换普通浮动(不是 centerFloat)的功能,但它们以平铺大小显示,例如 Xmonad: Float and resize windows to its “natural size
任何帮助深表感谢
xmonad - 如何通过 bash 命令/文件从 Xmonad 获取当前工作空间信息?
我需要来自 Xmonad 的有关当前工作区/屏幕的信息。我需要它在外部的 bash 脚本中,以便我可以根据我所在的当前工作区执行一些功能。
我在网上搜索,似乎 dynamicLog 是做到这一点的方法之一。但我无法弄清楚如何将信息从 Xmonad 发送到文件中。我想要做的是让 Xmonad 在某个文件更改时使用当前工作空间信息更新它。
这可以通过 DynamicLogger 完成吗?
我当前的 Xmonad dynamicLog 部分如下:
或者,在网上查看另一种方法,我尝试了类似的方法
...用于实用程序 wmctrl 但它不起作用。它的输出就像 -
感谢您对上述任何内容的任何帮助。
谢谢
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/
文件夹......)
haskell - 在 Xmonad 中为特定窗口配置无边框
目标
在 Xmonad 中为特定窗口设置无边框。
具体例子:我想要firefox
并且feh
总是没有边界。我不仅要为特定布局(例如,单个窗口)或特定窗口模式(如浮动)设置它。
尝试A
我最直接的想法是在 中添加一行manageHook
,它应该处理窗口创建。所以我在我的自定义中放了一行ManageHook
:
它编译,但不幸的是,当我开始时没有任何反应firefox
。
然后我尝试调试它:
- 测试了以下,它可以工作(新的firefox窗口浮动),这表明我的自定义
ManageHook
工作,我的逻辑(修改窗口后跟idHook
)应该是可以的。
通过在XMonad.Actions.NoBorders中尝试测试
setWindowBorderWidth
功能。做类似的事情。我使用了一个键绑定来调用它并且它有效。因此在创建窗口后的 Xmonad 会话期间运行良好。toggleBorder
toggleBorder
setWindowBorderWidth
toggleBorder
setWindowBorderWidth
测试了以下内容(在此处找到)但它不起作用,与我的代码相同(尝试 A)。
尝试 B
我在XMonad.Layout.NoBorders和这个答案hasBorder
中找到了这个函数,但我没有成功。
如果我只放入className =? "firefox" --> hasBorder False
但ManageHook
不使用layoutHook
,则不会发生任何事情。我查看了源代码,hasBorder
发现它只广播了一条消息,但没有设置边框。我想我可能需要调用layoutHook
fromXMonad.Layout.NoBorders
来真正设置边界,但我不确定应该使用哪一个。而且我也不确定是否需要指定要使用的任何布局XMonad.Layout.NoBorders
。
问题
Xmonad 是否设置了边界,
ManageHook
所以我在尝试 A 中的代码无效?如果 Q1 为真,这是否意味着在屏幕上绘制窗口时我只能在
LayoutHook
(可能使用)处不设置边框?XMonad.Layout.NoBorders
如果 Q2 为真,我是否需要指定布局以及
layoutHook
可以使用的布局?
haskell - 如何使用 IndependentScreens 在监视器 x 上获取工作区列表
我有 2 个不同尺寸的显示器,其中一个是垂直放置的,我希望它们默认有不同的布局
我XMonad.Layout.IndependentScreens
用来为每个监视器分配它自己的一组工作区
我找到了一个库,可以满足我的需要XMonad.Layout.PerWorkspace
有了这个,我定义了 2 个我将使用的监视器布局:
所以现在我试图在布局挂钩上使用它们,以及来自 IndependentScreens 的 workspacesOn 函数
这失败并出现以下错误:
现在我很困惑,因为该函数在文档中,并且我清楚地包含了对 IndependantStreens 的引用,它在错误消息中
上面的代码有什么问题,我该如何让它工作?
xmonad - 单个物理屏幕的多个“虚拟屏幕”概念
我使用带有 10 个工作区的单个物理屏幕的 XMonad。我想有两个或更多独立的工作空间实例,有点像单个物理屏幕上的多个“虚拟屏幕”。例如,虚拟屏幕 1 和 2 应该各自独立地拥有自己的工作区,然后我会使用一些键绑定在虚拟屏幕之间切换。
如何实现所需的配置?我偶然发现了XMonad.Layout.IndependentScreens但它并没有真正涵盖我需要的东西。
haskell - xmonad-contrib Prompt:在特定工作区中执行终端提示?
我最近决定通过 Stack 从源代码构建 XMonad 以进行自定义配置。让我先说我没有大量使用 Haskell 的经验。我的操作系统是 Linux - Arch。
设置
我正在尝试使用XMonad.Prompt
xmonad-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 )
我可以做些什么来修改manPrompt
或runInTerm
指定终端在哪个工作区中manPrompt
生成?或者有没有其他人知道实现我不知道的期望行为的方法?
编辑#1
在最近的答案的建议下,我试图修补代码以从manPrompt
运行,而不是. (https://hackage.haskell.org/package/xmonad-contrib-0.13/docs/XMonad-Actions-SpawnOn.html)spawnOn
XMonad.Actions.SpawnOn
runInTerm
这是我现在所拥有的:
但是,这不会编译,导致错误:
我认为这个问题是由于我未能正确掌握 Haskell 数据类型,但我不明白......如果调用的正确方法spawnOn
是spawnOn <workspaceId> <command>
,我如何将String
bash 命令传递给函数<command>
,就像上面一样?
编辑#2——解决方案#1
我目前的解决方案是使用一个自定义补丁XMonad.Prompt.Man
,manPrompt
它看起来像下面这样:
我猜这可以编译并且可以工作,但似乎仍然会导致与在具有不同布局的工作区之间移动终端窗口时spawnOn
相同的文本对齐问题。(我在我尝试过doShift
的原始帖子中提到了这些。)
为了更好地解释“文本对齐问题”的含义,我在此处添加了一个屏幕截图:https
://ibb.co/vxjcKZh将注意力集中在生成联机帮助页的工作区上,它应该是全屏的,但是您可以看到,文本不会填满整个终端窗口;这是因为该man
命令在窗口大小被压缩时运行。)
有没有办法在终端窗口产生后以某种方式刷新终端窗口中的文本?