aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--XMonad/Prompt/Ssh.hs20
1 files changed, 19 insertions, 1 deletions
diff --git a/XMonad/Prompt/Ssh.hs b/XMonad/Prompt/Ssh.hs
index 22d6336..122c137 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