LINUX.ORG.RU

Сгенерировать имя для скриншота Haskell

 ,


0

1

Надо сгенерить имя для скриншота в конфиге XMonad.
Для генерации берётся префикс, к нему добавляются дата и время и расширение .png. Дату и время можно получить только из монады IO. Как это оформить? В посте мешанина, поэтому вот код:

getCurrentDateAndTime :: ClockTime -> String
getCurrentDateAndTime = formatCalendarTime defaultTimeLocale "%c" . toUTCTime

genname :: String -> String
genname name = "~/screenshots/xmonad-" ++ name ++ ".png"

genfilename :: String
genfilename = genname $ getClockTime >>= getCurrentDateAndTime
myKeys = [ ("<Print>"		, spawn $ "imagemagick import " ++ genfilename 				)
	 , ("M-r"		, spawn "xmonad --restart"  		  				)
	 , ("M-j"		, prevWS		    	          				)
	 , ("M-k"		, nextWS		    	          				)
	 , ("M-f"		, spawn "firefox-bin"	    	          				)
	 , ("M-s"		, spawn "gksudo /usr/bin/pm-suspend"      				)
	 , ("C-M-r"		, spawn "gksudo /usr/bin/shutdown -r now" 				)
	 , ("C-M-s"		, spawn "gksudo /usr/bin/shutdown -h now" 				)
	 ]


если быть точнее, то вот

liftIO getClockTime >>= \ct -> spawn $ "imagemagick import " ++ (genname . getCurrentDateAndTime $ ct)

сам не тестил

f1u77y ★★★★
()
Ответ на: комментарий от f1u77y

нет, spawn :: String -> X ()

Тогда добавить liftIO перед getClockTime, если конечно у тебя X является инстансом MonadIO.

Извини, но XMonad я не юзал никогда.

Macil ★★★★★
()
Последнее исправление: Macil (всего исправлений: 1)
Ответ на: комментарий от SeTSeR

ага, нужно просто import. как же я мог не заметить?

f1u77y ★★★★
()
Ответ на: комментарий от f1u77y

Странное поведение не только в том, что он n-дцать раз просит выделить окно, но ещё и в том, что он сохраняет в домашнюю папку и формат имени не тот.

SeTSeR
() автор топика
Ответ на: комментарий от SeTSeR

Если над файлом изображения - да, легко. Если над самим изображением - нужен imagemagick - в любом случае, даже с хаскелем.

Bfgeshka ★★★★★
()
Ответ на: комментарий от Bfgeshka

Окей, спасибо, всё равно есть и то, и то.

SeTSeR
() автор топика

Делай проще, всё это от лукавого. Пинаем в xmonad что-то типа:

-- Key bindings. 
-- launch notify time
, ((modm,               xK_z     ), spawn "/home/dude/Bin/times")

Здеся у меня вызывается мой скрипт по ctrl+z, который чёт делает. Напиши свой скрипт и впихни на «педаль». А уже в скрипте, что Душе угодно.

Да, ф-ция spawn с ключами не ахти, так что если в строку всё пинать будешь...

dodevich
()
Последнее исправление: dodevich (всего исправлений: 1)
Ответ на: комментарий от f1u77y

Э нет. Я вот когда баловался с ней, то сложную строку по синтаксису передаёт неправильно.

Пример - лалала date(лалала). Обрезает.

dodevich
()
Последнее исправление: dodevich (всего исправлений: 2)
Ответ на: комментарий от f1u77y

Ага, safeSpawn волшебненько гребет список строк/агрументов. Спасибо, будем знать.

dodevich
()

Не мучайся, просто дерни bash скрипт, который все за тебя сделает.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.