From 5485ba57ac282906a5f4ae782d8eb4de8c15c1ab Mon Sep 17 00:00:00 2001 From: Brent Yorgey Date: Tue, 29 Dec 2009 17:13:46 +0000 Subject: [PATCH] X.P.Ssh: add entries from .ssh/config to ssh prompt completion --- XMonad/Prompt/Ssh.hs | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/XMonad/Prompt/Ssh.hs b/XMonad/Prompt/Ssh.hs index 22d6336f..122c137b 100644 --- a/XMonad/Prompt/Ssh.hs +++ b/XMonad/Prompt/Ssh.hs @@ -65,7 +65,9 @@ sshComplList = uniqSort `fmap` liftM2 (++) sshComplListLocal sshComplListGlobal sshComplListLocal :: IO [String] sshComplListLocal = do h <- getEnv "HOME" - sshComplListFile $ h ++ "/.ssh/known_hosts" + s1 <- sshComplListFile $ h ++ "/.ssh/known_hosts" + s2 <- sshComplListConf $ h ++ "/.ssh/config" + return $ s1 ++ s2 sshComplListGlobal :: IO [String] sshComplListGlobal = do @@ -93,6 +95,22 @@ sshComplListFile' kh = do $ filter nonComment $ lines l +sshComplListConf :: String -> IO [String] +sshComplListConf kh = do + f <- doesFileExist kh + if f then sshComplListConf' kh + else return [] + +sshComplListConf' :: String -> IO [String] +sshComplListConf' kh = do + l <- readFile kh + return $ map (!!1) + $ filter isHost + $ map words + $ lines l + where + isHost ws = take 1 ws == ["Host"] && length ws > 1 + fileExists :: String -> IO (Maybe String) fileExists kh = do f <- doesFileExist kh