我非常喜欢xmonad,但有一点会很棒:
如果我打开一个文件gvim -p --remote-tab-silent my-file,它在vim中打开,它始终打开workspace 1,我想自动切换到workspace 1.
我刚刚发现了viewShift-trick,但这只会在gvim生成新内容时更改工作区,因此只是部分地解决了我的问题.
感谢Daniel Wagner的评论,我能够做一些研究:
我找到了一个小程序来设置和取消紧急提示:设置.而且xwininifo我可以获得gvim的窗口ID.经过一些试验和错误后,我xprop向我展示了提示标志实际设置了.
GVIMWINID=`xwininfo -tree -root | grep GVIM | cut -d ' ' -f6`
seturgent $GVIMWINID 1
xprop -id $GVIMWINID | grep urgency
Run Code Online (Sandbox Code Playgroud)
现在我补充道
import XMonad.Hooks.UrgencyHook
..
myKeys conf@(XConfig {XMonad.modMask = modm}) = M.fromList $
[..
, ((mod4Mask , xK_x ), focusUrgent)
..]
..
main = do¬
xmproc <- spawnPipe "/usr/bin/xmobar"¬
xmonad $ …Run Code Online (Sandbox Code Playgroud) 我想让我的程序在屏幕上产生焦点,当它的键绑定被按下而不是在完成加载时当前焦点的屏幕上.
原因: 我目前的设置是Arch Linux + XMonad,我让它在6台显示器上运行.我已经使用XMonad大约一年了,我唯一的问题是需要一段时间才能打开的程序.例如,我第一次开始使用铬时需要3到几秒钟才能加载.我按下我的键绑定chrome,然后转到另一个屏幕做其他事情.但是当镀铬加载时,它会加载到屏幕上,而当前聚焦在屏幕上,而不是在按下生成键绑定时聚焦的屏幕上.
我的哈克尔技能很好......不存在.我以前在Lisp中编程并在C,python和JavaScript上花了很多时间,所以我确定如果需要的话我可以把它拿起来(所以请在答案中明确说明haskell样本).
提前致谢.
好吧,我实际上并没有使用Dvorak而是使用Neo2,但是当我使用矩阵型键盘(Truly Ergonomic)时,我也改变了数字.
因此,我的这种结构xmonad.hs不符合人体工程学:
-- mod-[1..9], Switch to workspace N
-- mod-shift-[1..9], Move client to workspace N
--
[((m .|. modMask, k), windows $ f i)
| (i, k) <- zip (XMonad.workspaces conf) [xK_1 .. xK_9]
, (f, m) <- [(W.greedyView, 0), (W.shift, shiftMask)]
Run Code Online (Sandbox Code Playgroud)
我想改变这一点,以便能够使用键2到0访问工作区1到9.
我怎么能这样做?我试图改变第三行
| (i, k) <- zip (XMonad.workspaces conf) [xK_2 .. xK_0]
Run Code Online (Sandbox Code Playgroud)
但后来我无法访问第9个工作区.我该如何改变这个?一个简短的解释会很好,所以要了解一下这个结构(我多年前学过Haskell而忘记了大部分内容).
我知道可以将某些程序设置为在某些工作空间中生成,如下所示:
myManageHook = composeAll
[ classname =? "XTerm" --> doShift "3" ]
main = xmonad $ defaultConfig
{ manageHook = myManageHook <+> manageHook defaultConfig }
Run Code Online (Sandbox Code Playgroud)
这样所有的实例Xterm都会在工作区"3"中产生.我想要做的是让所有新程序在工作区中产生,它们在启动时处于焦点,例如,如果我在工作区"1"并启动firefox,则快速切换到工作区"2" ,firefox窗口将保留在工作区"1".
我正在想一些有效的东西
import qualified XMonad.StackSet as W
myManageHook = composeAll
[ classname =? ".*" --> doShift currentTag ]
main = xmonad $ defaultConfig
{ manageHook = myManageHook <+> manageHook defaultConfig }
Run Code Online (Sandbox Code Playgroud)
这显然不起作用,但希望你能得到这个想法.
我的问题与意图中的这个问题非常相似,但是我希望所有程序都在最初聚焦的工作区中产生,但是我打开它们(dmenu,从终端等)
我觉得xmonad在两个窗口之间来回切换有点尴尬.是否允许这样的扩展(或核心xmonad的一部分)?
例如,我想经常在firefox和emacs之间切换,它们可能不在同一个工作区中.我目前使用gotoMenu通过输入来做这个M-g firefox<cr>,M-g emacs<cr>但这很尴尬,特别是如果有任何一个应用程序的多个实例.理想情况下,我想要一个单一的快捷方式来执行一个动作,比如给焦点到最近最近使用的无焦点窗口,我只需按下来回切换即可.
我最近开始在我的Ubuntu 10.04机器上试用XMonad,我有一个主要的抱怨.奇怪的是,我没有发现问题在网络上的其他地方重复.
我的XMonad会话开始超级,但是大约30分钟后,mod键停止工作.如果我然后想要关闭我的电脑...如果我打开一个终端,我可以手动关机,但是否则我一直在使用硬电源按钮关闭我的电脑.
mod键的失败似乎发生在屏幕保护程序激活后,我随后将其取消激活.
我可以从xmonad.hs或其他设置中提供任何进一步的信息
...
, modMask = mod4Mask -- Rebind Mod to the Windows key
...
Run Code Online (Sandbox Code Playgroud)
?
提前致谢,
杰米D.
每当 xmonad 启动、重新启动或重新编译时,我都会收到一条 xmessage:
xmonad.hs:1:8:
Could not find module `XMonad'
Perhaps you meant
Monad (needs flag -package haskell98-2.0.0.2)
CgMonad (needs flag -package ghc-7.6.3)
DsMonad (needs flag -package ghc-7.6.3)
Use -v to see a list of the files searched for
Run Code Online (Sandbox Code Playgroud)
这并不能阻止它启动,但我只能在系统重新启动时看到 xmonad 或 xmobar 设置的更新。我目前的 xmonad.hs 只是
import XMonad
main = xmonad defaultConfig
Run Code Online (Sandbox Code Playgroud)
它仍然会产生错误。任何导入其他模块的尝试都会产生类似的结果。我已经从 Arch 存储库安装xmonad并xmonad-contrib安装了这两个模块,所以模块应该正确地位于 ghc 搜索路径中,对吗?我试过像其他一些来源建议的那样从 Cabal 重新安装软件包,但它变成了一个完全的混乱,所以我回到了 Arch 存储库,它应该可以工作。从这里去哪里有点不知所措;任何帮助将不胜感激。
编辑:ghc-pkg list xmonad返回
/usr/lib/ghc-7.6.3/packag.conf.d
xmonad-0.11
/home/decalis/.ghc/x86_64-linux-7.6.3/package.conf.d
Run Code Online (Sandbox Code Playgroud)
和ghc-pkg check输出在这里:http : //pastebin.com/BsCPMn8M …
我希望能够使用鼠标上的按钮6和7(滚轮两侧的摇杆按钮)移动到上一个和下一个工作区.我猜它有一些关系additionalMouseBindings,如果它跟additionalKeys我一样是金色的.唉,它不是,我不完全了解如何定义新的绑定.天真的:
`additionalMouseBindings`
[ -- get the middle button to switch views
((0, button6), spawn "xdotool key super+Down")
, ((0, button7), spawn "xdotool key super+Up")
]
Run Code Online (Sandbox Code Playgroud)
因为对于知道Haskell和xmonad的人来说显而易见的原因是不起作用的.
任何建议的TIA.
我一直在撞墙一段时间.我有一堆类型,它们表示基本类型的转换(更具体地说,是XMonad中的布局修饰符).
长话短说,这些类型都很亲切(* -> *) -> * -> *.
我想做的事情,由于我不想在这里讨论的原因,是采取一堆这些转换,并将它们表示为基本类型(实物* -> *)的单一转换.
我的第一个想法是定义一个类型合成运算符
newtype ((f :: (* -> *) -> * -> *) :. (g :: (* -> *) -> * -> *)) l a
= Compose (f (g l) a)
Run Code Online (Sandbox Code Playgroud)
它在大多数情况下都有效.但是,给定一个值,比方说v :: f1 (f2 (f3 (... (fn l))) a,我必须应用Compose n-1它来获取v' :: (f1 :. f2 :. ... :. fn) l a,这不是很漂亮,有点烦人.
所以,问题是,有没有办法自动应用,Compose直到我得到我想要的东西?
F.ex.,现在我这样做:
modifyLayout $ Compose . Compose . …Run Code Online (Sandbox Code Playgroud) 我正在尝试配置NoMachine远程桌面来运行xmonad.我一直遇到的一件事是默认的xmonad 安装说明需要注销并重新登录.在NoMachine等远程桌面应用程序中,无法以用户身份注销 - 只能断开与会话的连接.
我可以选择创建新的Gnome,KDM或XDM桌面,也可以选择自定义会话,例如运行默认的X客户端脚本或启动时的自定义命令.
有没有人有最好的配置经验?