2014-05-22 2 views
0

내 도트 파일은 컴퓨터간에 99 % 유사하지만 여러 가지 사소한 설정을 위해 을 유지하는 사소한 조작이 있습니다. 호스트 이름을 기준으로 if 문을 사용하여 차별하는 것이 계획되었습니다. 로 보일 것이다 뭔가 bashrc에 또는 zshrcxmonad/xmobar 설정 파일에서 호스트 이름 가져 오기

if [ $(hostname) == 'host1' ]; then 
# things to do differently on host1. 
elif [ $(hostname) == 'host2' ]; then 
# things to do differently on host2. 
fi 

단순히 거기에 진짜 하스켈로 해석되는 설정 파일 xmobar 것으로 의심 같은 쉘 설정에 따른다. xmobar에있는 쉘과 비슷한 것을 얻는 방법에 대한 의견이 있으십니까?

주로 내가 xmonad를 사랑하지만 아직 하스켈 문법을 배운하지 않은, 내 구문은 희망찬 가능성 잘못된 인식

Config { 
if hostname == "host1" 
then 
    font = "xft:Fixed-9", 
    position = Static { xpos = 0, ypos = 0, width = 1280, height = 16 }, 
else if hostname == "host2" 
then 
    font = "xft:Fixed-12", 
    position = Static { xpos = 1920, ypos = 0, width = 1800, height = 16 }, 
lowerOnStart = True, 
commands = [ 
    -- if here as well to switch between eth0 and wls3 
    Run Network "wls3" ["-t","Net: <rx>, <tx>","-H","200","-L","10","-h","#cc9393","-l","#709080","-n","#705050"] 10, 
    Run Date "%a %b %_d %l:%M" "date" 10, 
    Run Battery ["-t", "Bat: <left>%","-L","10","-H","11","-l","#CC9393","-h","#709080"] 10, 
    Run StdinReader 
], 
sepChar = "%", 
alignSep = "}{", 
template = "%StdinReader% }{ %multicpu% | %memory% | %Vol% | %wls3% | %battery% | <fc=#709080>%date%</fc>" 

} 

처럼 xmobar 뭔가 폭 및 네트워크 인터페이스를 수정하고자하고있다. ghci에서

가 :

λ> import Network.HostName 
λ> getHostName 
Loading package hostname-1.0 ... linking ... done. 
"hostname1" 

당신이 당신의 호스트에 대한 다른 xmobar 설정을 할 것으로 보인다 xmonad.hs 이후

+0

xmonad의 설정 파일 그냥 조각 : 다음과 같은 패턴을 사용하여 당신은 다음 xmonad.hs 파일에 적절한 장소에이 메소드를 호출 할 수 있습니다

createXmobarrc :: String -> IO() createXmobarrc hostname = undefined -- Write your logic 

:이 유형의 정의는 다음과 같이 보일 것입니다 Haskell 코드의 경우,'Network' 패키지에서'getEnv "HOST"또는'getHostName'에 의해 호스트 명을 얻을 수 있습니다. 그러나 나는 이것이 당신이 원하는 대답이라고 생각하지 않는다, 그래서 xmonad의 설정 파일에서 실제로 달성하기를 원하는 것을 설명 할 수 있겠는가? – ymonad

+0

방금 ​​내 xmobar.hs 파일에서 스 니펫으로 업데이트했습니다. 나는 ".hs"결말이 코드가 아니라 단순한 설정이 아니라 나를 쓰다듬어 야한다고 생각한다. 그러나 haskell 문법은 나에게 매우 외국적이다. – bertabus

+0

@bertabus'xmobar'의 최신 버전에 대해서는 잘 모르겠지만, 이전 버전은 일반적으로'.xmobarrc' 파일을 파싱했습니다. 그 때문에 해당 파일에 주석을 입력 할 수 없습니다. 그렇다면 여전히 그 파일에서'if else'표현식을 사용할 수 있다고 생각하지 않습니다. 최근 버전에서는 그렇지 않은 경우 기쁠 것입니다. 그러나 확실하지 않습니다. – Sibi

답변

1

당신이 그것을 이름의 발견, 패키지 hostname을 사용할 수 있습니다, 하스켈 파일입니다. 이를 달성하는 한 가지 방법은 지정된 호스트에 대해 새로운 .xmobarrc 파일을 만드는 함수를 작성하는 것입니다.

main = do 
hostname <- getHostName 
createXmobarrc hostname -- produce appropriate .xmobarrc file for a given host 
-- other xmonad stuff follows here