• # Just for fun

    Posté par . En réponse au journal Une astuce dans IceWM. Évalué à 4.

    Un petit .jl pour faire la même chose. Attention, ça ne permet de bouger dans les coins en prenant soin d'éviter un éventuel panel, pager (qui utilise ce genre de trucs de toute façon ?).

    ;; -*- sawfish -*-
    ;; http://maruska.dyndns.org/comp/activity/sawfish/mmc/extremes.jl(...)
    ;; 2003, fatnerf

    ;;; push window to the extreme (of the viewport)

    (define-structure extremes
    (export move-to-extreme
    extreme-window-n)
    (open rep
    rep.system
    rep.regexp
    rep.data.ring
    sawfish.wm.windows
    sawfish.wm.events
    sawfish.wm.misc
    sawfish.wm.util.rects
    sawfish.wm.state.maximize
    sawfish.wm.state.iconify
    sawfish.wm.custom
    sawfish.wm.commands
    sawfish.wm.workspace
    sawfish.wm.util.stacking
    sawfish.wm.commands)


    ;;(define desired-x)
    ;;(define desired-y)

    ;; copied from ...'friedel.corner (by Friedrich Delgado Friedrichs <friedel@ nomaden.org>)
    (define (corner-window-position w x y)
    (window-put w 'position x y)
    (move-window-to w x y)
    ;; isn't it implicit?
    (call-window-hook 'after-move-hook w '(())))

    ;; -1 0 1
    ;;
    (define (shift selector position size width)
    (cond ((eq selector -1)
    0)
    ((eq selector 0)
    position)
    ((eq selector 1)
    (- size width)
    )
    ((eq selector 3)
    (round (/ (- size width) 2))
    )))

    (define (move-to-extreme w vert hor)
    ""
    (let((desired-x ;<---->
    (shift
    hor
    (car (window-position w))
    (screen-width)
    (car (window-frame-dimensions w))))
    (desired-y
    (shift
    vert
    (cdr (window-position w))
    (screen-height)
    (cdr (window-frame-dimensions w)))))
    (corner-window-position w desired-x desired-y)))

    ;; (move (input-focus) 1 0)
    (define-command 'extreme-window-se
    (lambda (w) (move-to-extreme w 1 1)) #:spec "%W")
    (define-command 'extreme-window-sw
    (lambda (w) (move-to-extreme w 1 -1)) #:spec "%W")
    (define-command 'extreme-window-s
    (lambda (w) (move-to-extreme w 1 0)) #:spec "%W")

    ;; west/eastt
    (define-command 'extreme-window-w
    (lambda (w) (move-to-extreme w 0 -1)) #:spec "%W")
    (define-command 'extreme-window-e
    (lambda (w) (move-to-extreme w 0 1)) #:spec "%W")

    ;; north
    (define-command 'extreme-window-n
    (lambda (w) (move-to-extreme w -1 0)) #:spec "%W")
    (define-command 'extreme-window-nw
    (lambda (w) (move-to-extreme w -1 -1)) #:spec "%W")
    (define-command 'extreme-window-ne
    (lambda (w) (move-to-extreme w -1 1)) #:spec "%W")

    ;; center
    (define-command 'extreme-window-c
    (lambda (w) (move-to-extreme w 3 3)) #:spec "%W")
    )


    Ainsi que les raccourcis qui vont bien (parce que le pavé numérique, c'est bien, mais sur les laptops, c'est pas terrible.

    (require 'extremes)
    (require 'sawfish.wm.keymaps)
    (bind-keys window-keymap
    "C-I" 'extreme-window-nw ; move to extr.
    "C-P" 'extreme-window-ne
    "C-L" 'extreme-window-c
    "C-." 'extreme-window-sw
    "C-section" 'extreme-window-se
    )


    Et pour finir, un petit mode de placement, pour placer automatiquement les fenêtres dans un coin (ignore les panels, c'est un peu gruik ...

    ;; (c) nerf, 2004
    ;; GPL http://gnu.org(...)

    ;; New placement mode to put windows in corners

    ;; require ...
    (require 'extremes)
    (require 'sawfish.wm.placement)

    (define (plac-se w)
    ((move-to-extreme w 1 1)))
    (define (plac-nw w)
    ((move-to-extreme w -1 -1)))
    (define (plac-ne w)
    ((move-to-extreme w -1 1)))
    (define (plac-sw w)
    ((move-to-extreme w 1 -1)))

    (define-placement-mode 'south-east plac-se #:normal t)
    (define-placement-mode 'south-west plac-sw #:normal t)
    (define-placement-mode 'north-east plac-ne #:normal t)
    (define-placement-mode 'north-west plac-nw #:normal t)