# stumpwm
spline(station13, 1) — All
2015-07-15 05:43:31


Вот неожиданно для самого себя подсел на сабж. Это такой тайловый оконный менеджер, написанный на Common Lisp. Вполне юзабельный из коробки и просто божественный после написания примерно 100 строк конфига, который по сути является программой на CL.

Бешенная гибкость (отсутствующий функционал очень просто дописывается), возможность прописать в конфиге загрузку swank и как следствие подключиться к lisp-машине с помощью slime и хорошая документация. Я покорён.

А чем пользуетесь вы?

# Re: stumpwm
Difrex(mira, 14) — spline
2015-07-15 07:06:51


>А чем пользуетесь вы?
На работе i3wm, дома LXDE и KDE.

>Вполне юзабельный из коробки и просто божественный после написания примерно 100 строк конфига, который по сути является программой на CL.
Это многих способно отпугнуть, как и от имакса с его елиспом :)

# Re: stumpwm
spline(station13, 1) — Difrex
2015-07-15 07:14:04


>На работе i3wm, дома LXDE и KDE.

Как раз с i3wm на stumpwm перелез. Просто хотелось что-то типа ion3/notion, но без lua +)

>Это многих способно отпугнуть, как и от имакса с его елиспом :)

Есть такое дело, но я с FVWM перешёл на тайлинг. А там и скрипты свои были и генераторы скриптов на баше и длинный-длинный конфиг. Меня не проймёшь =) Да и имаксом пользуюсь уже лет 6-7.

# Re: stumpwm
vit01(mira, 1) — spline
2015-07-15 07:16:21


> А чем пользуетесь вы?
На домашних машинах у меня Awesome.

Ещё нравятся i3wm, LXDE и dwm, но ими пользуюсь редко.

# Re: stumpwm
vit01(mira, 1) — Difrex
2015-07-15 07:19:55


> Это многих способно отпугнуть, как и от имакса с его елиспом :)

А вот меня от емакса отпугнул не елисп, а отсутствие адекватной локализации и поддержки русского языка.

Наличие языка программирования под рукой - это как раз плюс.

# Re: stumpwm
spline(station13, 1) — vit01
2015-07-15 07:34:41


>А вот меня от емакса отпугнул не елисп, а отсутствие адекватной локализации и поддержки русского языка.

Так давно смотрел его GUI, хотя и пользуюсь Gtk-версией, что не сразу и сообразил о чём речь =)

# Re: stumpwm
Difrex(mira, 14) — Difrex
2016-05-25 08:20:20


>На работе i3wm, дома LXDE и KDE.
Теперь на работе i3wm, GNOME 3.20 на ноуте и дома на десктопе LXDE.

ЗЫ: Гном очень понравился. Выглядит целостно, дизайн - огонь. Приложения простые и быстрые. На ноуте у меня тачевый экран - работает зашибись, мультитач в том числе.

# Re: DE/WM
vit01(mira, 1) — Difrex
2016-05-25 14:52:30


Difrex> ЗЫ: Гном очень понравился. Выглядит целостно, дизайн - огонь. Приложения простые и быстрые. На ноуте у меня тачевый экран - работает зашибись, мультитач в том числе.

Да, гном в этом плане очень хорош. Только вот на слабом и старом железе ему делать нечего. Жаль, что у гнома нет лёгкой версии "нормального" режима, который не имел бы композитинга и прочих свистелок.

Mate, например, умеет жить без графического ускорения; та же Плазма без проблем работает с Openbox взамен KWin.

// Раньше часто использовал gnome-calculator из-за его простоты и удобства. Теперь перешёл на Emacs calс и не жалею :)

# Re: DE/WM
Difrex(mira, 14) — vit01
2016-05-26 13:28:34


>Раньше часто использовал gnome-calculator из-за его простоты и удобства. Теперь перешёл на Emacs calс и не жалею
А я в качестве калькулятора юзаю echo $(( 2 + 2 )) :D

# Re: DE/WM
vit01(mira, 1) — Difrex
2016-05-26 13:58:50


>Раньше часто использовал gnome-calculator из-за его простоты и удобства. Теперь перешёл на Emacs calс и не жалею
Difrex> А я в качестве калькулятора юзаю echo $(( 2 + 2 )) :D

Даже GIMP можно в качестве калькулятора использовать (см. ii://develop.16). Причём во встроенном лиспе Гимпа есть и корни, и тригонометрические функции и многое другое.

# Re: DE/WM
btimofeev(station13, 13) — vit01
2016-05-26 19:50:58


vit01> // Раньше часто использовал gnome-calculator из-за его простоты и удобства. Теперь перешёл на Emacs calс и не жалею :)

Я раньше использовал консоль python'а, а сейчас обычно использую консольный bc.

# Re: DE/WM
Andrew Lobanov(station13, 1) — btimofeev
2016-05-30 21:30:03


btimofeev> Я раньше использовал консоль python'а, а сейчас обычно использую консольный bc.

Я emacs lisp использую. Всё равно большую часть времени он у меня запущен.

# Re: stumpwm
Difrex(mobile)(tavern,23) — spline
2018-03-28 12:32:12


А можешь поделиться своим конфигом, если он у тебя остался.

У меня почему-то грузиться не хочет этот WM, хотя я quicklisp поставил, swank тоже. Короче, непонятно, как им пользоваться.

# Re: stumpwm
Andrew Lobanov(tavern,1) — Difrex(mobile)
2018-03-29 05:28:33


Difrex(mobile)> А можешь поделиться своим конфигом, если он у тебя остался.
Difrex(mobile)> У меня почему-то грузиться не хочет этот WM, хотя я quicklisp поставил, swank тоже. Короче, непонятно, как им пользоваться.

Вообще, он готов к работе сразу без конфига. Но с конфигом он подгоняется под хотелки пользователя =)

Сейчас могу поделиться только таким вариантом:

== .stumpwmrc
;;;
;;; StumpWM configuration file by Andrew Lobanov
;;; 2017-12-05
;;;

(ql:quickload :swank)
(swank-loader:init)
(defcommand swank () ()
    (swank:create-server :port 4006
                       :style swank:*communication-style*
                       :dont-close t)
  (echo-string (current-screen) 
       "Starting swank. M-x slime-connect RET RET, then (in-package stumpwm)."))
(swank)

(in-package :stumpwm)

;;;
;;; Groups
;;;
(grename "first")
(gnewbg "web")
(gnewbg "media")
(gnewbg "emacs")
(gnewbg "file")
(gnewbg "other")
(gnewbg "code")
(gnewbg "gfx")
(gnewbg "mail")
(gnewbg "down")
(gnewbg "vm")
(gnewbg "games")

;;;
;;; Apearence
;;;
(set-fg-color "#aaaaaa")
(set-bg-color "#242424")
(set-border-color "#005577")
(set-focus-color "#005577")
(set-font "-*-terminus-medium-r-*-*-14-*-*-*-*-*-iso10646-1")
(setf *message-window-padding* 5)
(setf *message-window-gravity* :center)
(setf *input-window-gravity* :center)

;;;
;;; Time format
;;;
(setf *time-format-string-default* "%d.%m.%Y %A %H:%M")
(setf *time-day-names*
      #("Понедельник" "Вторник" "Среда" "Четверг" "Пятница" "Суббота" "Воскресение"))

;;;
;;; Menu
;;;
(defparameter *app-menu* '(("binkd" "urxvt -fn 'xft:terminus:size=14:bold' -fb 'xft:terminus:size=14:bold' -title binkd -e rs")
			   ("caesium" "cd ~/idec && urxvt -fn 'xft:Terminus:pixelsize=18:bold' -fb 'xft:Terminus:pixelsize=18:bold' -title Caesium -e ./caesium.py")
			   ("golded" "LANG=ru_RU.koi8-r urxvt -g '136x41' -fn 'xft:Terminus:pixelsize=18:bold' -fb 'xft:Terminus:pixelsize=18:bold' -title GoldEd -e ge")
			   ("moc" "urxvt -title MOCP -e mocp")
			   ("rtorrent" "urxvt -title rtorrent -e rtorrent")
			   ("wbinkd" "urxvt -fn 'xft:terminus:size=14:bold' -fb 'xft:terminus:size=14:bold' -title binkd -e wrs")
			   ("wcaesium" "cd ~/idec && urxvt -fn 'xft:Terminus:pixelsize=18:bold' -fb 'xft:Terminus:pixelsize=18:bold' -title Caesium -e ./work.sh")))

(defcommand mymenu () ()
  (labels ((pick (options)
             (let ((selection (stumpwm::select-from-menu (current-screen) options "")))
               (cond
                 ((null selection)
                  (throw 'stumpwm::error "Abort."))
                 ((stringp (second selection))
                  (second selection))
                 (t
                  (pick (cdr selection)))))))
    (let ((choice (pick *app-menu*)))
      (run-shell-command choice))))

;;;
;;; Mode-line
;;;
(load-module "disk")
(load-module "cpu")
(load-module "mem")
(load-module "battery-portable")
(load-module "pager")

(setf disk:*disk-usage-paths* '("/home"))
(setf *time-modeline-string* "%d.%m.%Y %A %H:%M")

(setf *mode-line-foreground-color* "#aaaaaa")
(setf *mode-line-background-color* "#242424")
(setf *mode-line-position* :top)
(setf *mode-line-border-width* 0)
(setf *mode-line-pad-x* 0)
(setf *mode-line-pad-y* 0)
(setf *mode-line-timeout* 5)
(setf disk:*disk-modeline-fmt* "%m: %a")
(setf *screen-mode-line-format*
      (list "%P^>"
			"%B │ %D│ %d "))
(mode-line)

(defcommand screenshot (select-window) ((:y-or-n "Select window "))
  "Make a screenshot."
  (redisplay)
  (if select-window
      (echo (run-shell-command "~/programs/screen.sh -s" t))
      (echo (run-shell-command "~/programs/screen.sh" t))))

;;;
;;; Key bindings
;;;
(define-key *root-map* (kbd "c") "exec urxvt")
(define-key *root-map* (kbd "P") "screenshot")
(define-key *root-map* (kbd ".") "mymenu")
(define-key *root-map* (kbd "a") "status")
(define-key *root-map* (kbd "l") "run-shell-command slock")
(define-key *root-map* (kbd "B") "mode-line")
(define-key *root-map* (kbd "F10") "gselect down")
(define-key *root-map* (kbd "F11") "gselect vm")
(define-key *root-map* (kbd "F12") "gselect games")
(define-key *top-map* (kbd "M-F5") "exec xbacklight -dec 10")
(define-key *top-map* (kbd "M-F6") "exec xbacklight -inc 10")

;;;
;;; Workspaces rules
;;;
(define-frame-preference "web"
    (0 nil t :instance "Navigator"))

(define-frame-preference "media"
    (0 nil t :title "MOC"))

(define-frame-preference "emacs"
    (0 nil t :class "Emacs"))

(define-frame-preference "gfx"
    (0 nil t :class "Gimp")
  (1 nil t :class "Geeqie"))

(define-frame-preference "mail"
    (0 nil t :title "Caesium")
  (1 nil t :title "binkd")
  (2 nil t :title "GoldEd+"))

(define-frame-preference "down"
    (0 nil t :title "rtorrent")
  (1 nil t :instance "Places")
  (2 nil t :instance "DTA"))

Конфиг использует самопальный модуль pager для отображения списка рабочих столов в modeline в духе i3wm.

== package.lisp
(defpackage #:pager
  (:use #:cl :stumpwm))

(in-package #:pager)

(import '(
		  stumpwm::sort-groups
		  stumpwm::current-screen
		  stumpwm::group-windows
		  stumpwm::group-name))

== pager.asd
;;;; pager.asd

(asdf:defsystem #:pager
  :description "i3wm-like pager"
  :author "Andrew Lobanov <spline@rooker.ru>"
  :license "GPLv3"
  :depends-on (#:stumpwm)
  :serial t
  :components ((:file "package")
  (:file "pager")))

== pager.lisp
(in-package #:pager)

(defun pager (ml)
  (declare (ignore ml))
  (let (g)
    (dolist (group (sort-groups (current-screen)))
      (if (eq (current-group) group)
	      (push (concatenate 'string "^(:fg \"#eeeeee\")^(:bg \"#005577\") " (group-name group) " ^n") g)
	      (if (group-windows group)
		  (push (concatenate 'string " " (group-name group) " ") g))))
    (format nil "~{~a~}" (reverse g))))

(add-screen-mode-line-formatter #\P #'pager)

Эти файлы складываются в ~/.stumpwm.d/modules/modeline/pager/ и получаешь stumpwm 1 в 1 как был у меня =)