10

私は xmonad がとても好きですが、1 つ素晴らしいことがあります。

でファイルを開いて、gvim -p --remote-tab-silent my-file常にオンになっている vim で開いた場合workspace 1、自動的に に切り替えたいと思いますworkspace 1

viewShift-trickを発見したばかりですが、これは新しいワークスペースgvimが生成された場合にのみワークスペースを変更するため、問題の一部が解決されます。

編集:

Daniel Wagner のコメントのおかげで、いくつかの調査を行うことができました。

緊急度のヒントを設定および設定解除する小さなプログラムを見つけました: seturgency。そして、xwininifogvim のウィンドウ 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 が既に開いている場合、状況はもう少しトリッキーです。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 を生成する場合は、自動的に切り替えたいと考えています。だから私はに追加しmyKeysましたxmonad.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 に答える