10

我非常喜欢 xmonad,但有一件事会很棒:

如果我打开一个文件gvim -p --remote-tab-silent my-file并且它在始终打开的 vim 中打开workspace 1,我想自动切换到workspace 1.

我刚刚发现了viewShift-trick,但这只会在gvim产生新的工作空间时改变工作空间,因此只能部分解决我的问题。

编辑:

感谢丹尼尔瓦格纳的评论,我能够做一些研究:

我找到了一个设置和取消设置紧急提示的小程序:seturgency。我xwininifo可以得到 gvim 的窗口 id。经过反复试验,我xprop向我展示了实际上设置了提示标志。

GVIMWINID=`xwininfo -tree -root | grep GVIM | cut -d ' ' -f6`
seturgent $GVIMWINID 1
xprop -id $GVIMWINID | grep urgency

现在我添加了

import XMonad.Hooks.UrgencyHook
..
 myKeys conf@(XConfig {XMonad.modMask = modm}) = M.fromList $
[..
, ((mod4Mask             , xK_x      ), focusUrgent)
..]
..
main = do¬                                                                       
        xmproc <- spawnPipe "/usr/bin/xmobar"¬                                   
        xmonad $ withUrgencyHook NoUrgencyHook $ defaultConfig {..}

到我的.xmonad.hs,并且xmonad --recompile && xmonad --restart没有错误但没有击中什么也没mod4 + x做,尽管xprop确实报告了紧急提示已设置。

4

1 回答 1

3

感谢 Daniel Wagner 和 Joachim Breitner 的评论,我至少可以部分解决问题。

  • 如果尚未打开,则自动切换到 gvim,只需添加到 `myManageHooks

    myManageHook = composeAll [.., className =? "Gvim"--> viewShift "^ vim",..]
    
  • 如果 gvim 已经打开,情况就有点棘手了,我制作了一个 shell 脚本来获取 gvim 的窗口 id 并查看是否传递了参数。

    #! /usr/bin/zsh
    
    GVIMWINID=`xwininfo -tree -root |grep GVIM | cut -d ' ' -f6`
    
    if [[ -n $GVIMWINID ]]; then
        #echo gvim is running
        #echo $GVIMWINID
        if [[ -n $@ ]]; then
            #echo there are args
            gvim -p --remote-tab-silent $@
        else
            #echo no args
            gvim --remote-send ":tabnew<cr>"
        fi
    else
        #echo gvim is not yet running
        #echo $GVIMWINID
        gvim -p $@
    fi
    seturgent $GVIMWINID 1
    

现在,如果我生成一个新的 gv,则窗口设置了紧急提示,我可以切换到它。但我想自动切换到窗口 - 所以至少如果我通过键盘生成 gvim 我想自动切换。所以我添加myKeysxmonad.hs

myKeys conf@(XConfig {XMonad.modMask = modm}) = M.fromList $
[.., ((mod4Mask, xK_F1),
        spawn "gv" >>
        spawn "notify-send -t 500 -i /usr/share/pixmaps/vim-32.xpm gVim" >>
        focusUrgent),..]

spawn "notify-send .."行充当时间缓冲区的地方,因为产卵+设置紧急提示似乎需要一些时间并且focusUrgent被调用得太早。

唯一未解决的事情是,如果我从终端调用我的gv-script 以切换到 gvim 的工作区。

于 2012-07-03T12:33:39.540 回答