add some hook, add example config
This commit is contained in:
parent
03cbf0a766
commit
f2e7aee743
206
etc/config
206
etc/config
|
@ -1,206 +0,0 @@
|
||||||
# i3 config file (v4)
|
|
||||||
#
|
|
||||||
# Please see https://i3wm.org/docs/userguide.html for a complete reference!
|
|
||||||
#
|
|
||||||
# This config file uses keycodes (bindsym) and was written for the QWERTY
|
|
||||||
# layout.
|
|
||||||
#
|
|
||||||
# To get a config file with the same key positions, but for your current
|
|
||||||
# layout, use the i3-config-wizard
|
|
||||||
#
|
|
||||||
|
|
||||||
# Font for window titles. Will also be used by the bar unless a different font
|
|
||||||
# is used in the bar {} block below.
|
|
||||||
font pango:monospace 8
|
|
||||||
|
|
||||||
# This font is widely installed, provides lots of unicode glyphs, right-to-left
|
|
||||||
# text rendering and scalability on retina/hidpi displays (thanks to pango).
|
|
||||||
#font pango:DejaVu Sans Mono 8
|
|
||||||
|
|
||||||
# The combination of xss-lock, nm-applet and pactl is a popular choice, so
|
|
||||||
# they are included here as an example. Modify as you see fit.
|
|
||||||
|
|
||||||
# xss-lock grabs a logind suspend inhibit lock and will use i3lock to lock the
|
|
||||||
# screen before suspend. Use loginctl lock-session to lock your screen.
|
|
||||||
exec --no-startup-id xss-lock --transfer-sleep-lock -- i3lock --nofork
|
|
||||||
|
|
||||||
# NetworkManager is the most popular way to manage wireless networks on Linux,
|
|
||||||
# and nm-applet is a desktop environment-independent system tray GUI for it.
|
|
||||||
exec --no-startup-id nm-applet
|
|
||||||
|
|
||||||
# Use pactl to adjust volume in PulseAudio.
|
|
||||||
set $refresh_i3status killall -SIGUSR1 i3status
|
|
||||||
bindsym XF86AudioRaiseVolume exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ +10% && $refresh_i3status
|
|
||||||
bindsym XF86AudioLowerVolume exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ -10% && $refresh_i3status
|
|
||||||
bindsym XF86AudioMute exec --no-startup-id pactl set-sink-mute @DEFAULT_SINK@ toggle && $refresh_i3status
|
|
||||||
bindsym XF86AudioMicMute exec --no-startup-id pactl set-source-mute @DEFAULT_SOURCE@ toggle && $refresh_i3status
|
|
||||||
|
|
||||||
# use these keys for focus, movement, and resize directions when reaching for
|
|
||||||
# the arrows is not convenient
|
|
||||||
set $up l
|
|
||||||
set $down k
|
|
||||||
set $left j
|
|
||||||
set $right semicolon
|
|
||||||
|
|
||||||
# use Mouse+Mod1 to drag floating windows to their wanted position
|
|
||||||
floating_modifier Mod1
|
|
||||||
|
|
||||||
# start a terminal
|
|
||||||
bindsym Mod1+Return exec i3-sensible-terminal
|
|
||||||
|
|
||||||
# kill focused window
|
|
||||||
bindsym Mod1+Shift+q kill
|
|
||||||
|
|
||||||
# start dmenu (a program launcher)
|
|
||||||
bindsym Mod1+d exec dmenu_run
|
|
||||||
# A more modern dmenu replacement is rofi:
|
|
||||||
# bindsym Mod1+d exec rofi -modi drun,run -show drun
|
|
||||||
# There also is i3-dmenu-desktop which only displays applications shipping a
|
|
||||||
# .desktop file. It is a wrapper around dmenu, so you need that installed.
|
|
||||||
# bindsym Mod1+d exec --no-startup-id i3-dmenu-desktop
|
|
||||||
|
|
||||||
# change focus
|
|
||||||
bindsym Mod1+$left focus left
|
|
||||||
bindsym Mod1+$down focus down
|
|
||||||
bindsym Mod1+$up focus up
|
|
||||||
bindsym Mod1+$right focus right
|
|
||||||
|
|
||||||
# alternatively, you can use the cursor keys:
|
|
||||||
bindsym Mod1+Left focus left
|
|
||||||
bindsym Mod1+Down focus down
|
|
||||||
bindsym Mod1+Up focus up
|
|
||||||
bindsym Mod1+Right focus right
|
|
||||||
|
|
||||||
# move focused window
|
|
||||||
bindsym Mod1+Shift+$left move left
|
|
||||||
bindsym Mod1+Shift+$down move down
|
|
||||||
bindsym Mod1+Shift+$up move up
|
|
||||||
bindsym Mod1+Shift+$right move right
|
|
||||||
|
|
||||||
# alternatively, you can use the cursor keys:
|
|
||||||
bindsym Mod1+Shift+Left move left
|
|
||||||
bindsym Mod1+Shift+Down move down
|
|
||||||
bindsym Mod1+Shift+Up move up
|
|
||||||
bindsym Mod1+Shift+Right move right
|
|
||||||
|
|
||||||
# split in horizontal orientation
|
|
||||||
bindsym Mod1+h split h
|
|
||||||
|
|
||||||
# split in vertical orientation
|
|
||||||
bindsym Mod1+v split v
|
|
||||||
|
|
||||||
# enter fullscreen mode for the focused container
|
|
||||||
bindsym Mod1+f fullscreen toggle
|
|
||||||
|
|
||||||
# change container layout (stacked, tabbed, toggle split)
|
|
||||||
bindsym Mod1+s layout stacking
|
|
||||||
bindsym Mod1+w layout tabbed
|
|
||||||
bindsym Mod1+e layout toggle split
|
|
||||||
|
|
||||||
# toggle tiling / floating
|
|
||||||
bindsym Mod1+Shift+space floating toggle
|
|
||||||
|
|
||||||
# change focus between tiling / floating windows
|
|
||||||
bindsym Mod1+space focus mode_toggle
|
|
||||||
|
|
||||||
# focus the parent container
|
|
||||||
bindsym Mod1+a focus parent
|
|
||||||
|
|
||||||
# focus the child container
|
|
||||||
#bindsym Mod1+d focus child
|
|
||||||
|
|
||||||
# move the currently focused window to the scratchpad
|
|
||||||
bindsym Mod1+Shift+minus move scratchpad
|
|
||||||
|
|
||||||
# Show the next scratchpad window or hide the focused scratchpad window.
|
|
||||||
# If there are multiple scratchpad windows, this command cycles through them.
|
|
||||||
bindsym Mod1+minus scratchpad show
|
|
||||||
|
|
||||||
# Define names for default workspaces for which we configure key bindings later on.
|
|
||||||
# We use variables to avoid repeating the names in multiple places.
|
|
||||||
set $ws1 "1"
|
|
||||||
set $ws2 "2"
|
|
||||||
set $ws3 "3"
|
|
||||||
set $ws4 "4"
|
|
||||||
set $ws5 "5"
|
|
||||||
set $ws6 "6"
|
|
||||||
set $ws7 "7"
|
|
||||||
set $ws8 "8"
|
|
||||||
set $ws9 "9"
|
|
||||||
set $ws10 "10"
|
|
||||||
|
|
||||||
# switch to workspace
|
|
||||||
bindsym Mod1+1 workspace number $ws1
|
|
||||||
bindsym Mod1+2 workspace number $ws2
|
|
||||||
bindsym Mod1+3 workspace number $ws3
|
|
||||||
bindsym Mod1+4 workspace number $ws4
|
|
||||||
bindsym Mod1+5 workspace number $ws5
|
|
||||||
bindsym Mod1+6 workspace number $ws6
|
|
||||||
bindsym Mod1+7 workspace number $ws7
|
|
||||||
bindsym Mod1+8 workspace number $ws8
|
|
||||||
bindsym Mod1+9 workspace number $ws9
|
|
||||||
bindsym Mod1+0 workspace number $ws10
|
|
||||||
|
|
||||||
# move focused container to workspace
|
|
||||||
bindsym Mod1+Shift+1 move container to workspace number $ws1
|
|
||||||
bindsym Mod1+Shift+2 move container to workspace number $ws2
|
|
||||||
bindsym Mod1+Shift+3 move container to workspace number $ws3
|
|
||||||
bindsym Mod1+Shift+4 move container to workspace number $ws4
|
|
||||||
bindsym Mod1+Shift+5 move container to workspace number $ws5
|
|
||||||
bindsym Mod1+Shift+6 move container to workspace number $ws6
|
|
||||||
bindsym Mod1+Shift+7 move container to workspace number $ws7
|
|
||||||
bindsym Mod1+Shift+8 move container to workspace number $ws8
|
|
||||||
bindsym Mod1+Shift+9 move container to workspace number $ws9
|
|
||||||
bindsym Mod1+Shift+0 move container to workspace number $ws10
|
|
||||||
|
|
||||||
# reload the configuration file
|
|
||||||
bindsym Mod1+Shift+c reload
|
|
||||||
# restart i3 inplace (preserves your layout/session, can be used to upgrade i3)
|
|
||||||
bindsym Mod1+Shift+r restart
|
|
||||||
# exit i3 (logs you out of your X session)
|
|
||||||
bindsym Mod1+Shift+e exec "i3-nagbar -t warning -m 'You pressed the exit shortcut. Do you really want to exit i3? This will end your X session.' -B 'Yes, exit i3' 'i3-msg exit'"
|
|
||||||
|
|
||||||
# resize window (you can also use the mouse for that)
|
|
||||||
mode "resize" {
|
|
||||||
# These bindings trigger as soon as you enter the resize mode
|
|
||||||
|
|
||||||
# Pressing left will shrink the window’s width.
|
|
||||||
# Pressing right will grow the window’s width.
|
|
||||||
# Pressing up will shrink the window’s height.
|
|
||||||
# Pressing down will grow the window’s height.
|
|
||||||
bindsym $left resize shrink width 10 px or 10 ppt
|
|
||||||
bindsym $down resize grow height 10 px or 10 ppt
|
|
||||||
bindsym $up resize shrink height 10 px or 10 ppt
|
|
||||||
bindsym $right resize grow width 10 px or 10 ppt
|
|
||||||
|
|
||||||
# same bindings, but for the arrow keys
|
|
||||||
bindsym Left resize shrink width 10 px or 10 ppt
|
|
||||||
bindsym Down resize grow height 10 px or 10 ppt
|
|
||||||
bindsym Up resize shrink height 10 px or 10 ppt
|
|
||||||
bindsym Right resize grow width 10 px or 10 ppt
|
|
||||||
|
|
||||||
# back to normal: Enter or Escape or Mod1+r
|
|
||||||
bindsym Return mode "default"
|
|
||||||
bindsym Escape mode "default"
|
|
||||||
bindsym Mod1+r mode "default"
|
|
||||||
}
|
|
||||||
|
|
||||||
bindsym Mod1+r mode "resize"
|
|
||||||
|
|
||||||
# Start i3bar to display a workspace bar (plus the system information i3status
|
|
||||||
# finds out, if available)
|
|
||||||
bar {
|
|
||||||
status_command i3status
|
|
||||||
}
|
|
||||||
|
|
||||||
#######################################################################
|
|
||||||
# automatically start i3-config-wizard to offer the user to create a
|
|
||||||
# keysym-based config which used their favorite modifier (alt or windows)
|
|
||||||
#
|
|
||||||
# i3-config-wizard will not launch if there already is a config file
|
|
||||||
# in ~/.config/i3/config (or $XDG_CONFIG_HOME/i3/config if set) or
|
|
||||||
# ~/.i3/config.
|
|
||||||
#
|
|
||||||
# Please remove the following exec line:
|
|
||||||
#######################################################################
|
|
||||||
exec i3-config-wizard
|
|
|
@ -1,181 +0,0 @@
|
||||||
# WARNING
|
|
||||||
# WARNING: This configuration file is a template for the i3-config-wizard to
|
|
||||||
# WARNING: generate a config which uses keysyms in your current layout. It does
|
|
||||||
# WARNING: not get loaded by i3. Please do not change it.
|
|
||||||
# WARNING
|
|
||||||
|
|
||||||
# i3 config file (v4)
|
|
||||||
#
|
|
||||||
# Please see https://i3wm.org/docs/userguide.html for a complete reference!
|
|
||||||
|
|
||||||
set $mod Mod1
|
|
||||||
|
|
||||||
# Font for window titles. Will also be used by the bar unless a different font
|
|
||||||
# is used in the bar {} block below.
|
|
||||||
font pango:monospace 8
|
|
||||||
|
|
||||||
# This font is widely installed, provides lots of unicode glyphs, right-to-left
|
|
||||||
# text rendering and scalability on retina/hidpi displays (thanks to pango).
|
|
||||||
#font pango:DejaVu Sans Mono 8
|
|
||||||
|
|
||||||
# The combination of xss-lock, nm-applet and pactl is a popular choice, so
|
|
||||||
# they are included here as an example. Modify as you see fit.
|
|
||||||
|
|
||||||
# xss-lock grabs a logind suspend inhibit lock and will use i3lock to lock the
|
|
||||||
# screen before suspend. Use loginctl lock-session to lock your screen.
|
|
||||||
exec --no-startup-id xss-lock --transfer-sleep-lock -- i3lock --nofork
|
|
||||||
|
|
||||||
# NetworkManager is the most popular way to manage wireless networks on Linux,
|
|
||||||
# and nm-applet is a desktop environment-independent system tray GUI for it.
|
|
||||||
exec --no-startup-id nm-applet
|
|
||||||
|
|
||||||
# Use pactl to adjust volume in PulseAudio.
|
|
||||||
set $refresh_i3status killall -SIGUSR1 i3status
|
|
||||||
bindsym XF86AudioRaiseVolume exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ +10% && $refresh_i3status
|
|
||||||
bindsym XF86AudioLowerVolume exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ -10% && $refresh_i3status
|
|
||||||
bindsym XF86AudioMute exec --no-startup-id pactl set-sink-mute @DEFAULT_SINK@ toggle && $refresh_i3status
|
|
||||||
bindsym XF86AudioMicMute exec --no-startup-id pactl set-source-mute @DEFAULT_SOURCE@ toggle && $refresh_i3status
|
|
||||||
|
|
||||||
# Use Mouse+$mod to drag floating windows to their wanted position
|
|
||||||
floating_modifier $mod
|
|
||||||
|
|
||||||
# start a terminal
|
|
||||||
bindcode $mod+36 exec i3-sensible-terminal
|
|
||||||
|
|
||||||
# kill focused window
|
|
||||||
bindcode $mod+Shift+24 kill
|
|
||||||
|
|
||||||
# start dmenu (a program launcher)
|
|
||||||
bindcode $mod+40 exec dmenu_run
|
|
||||||
# A more modern dmenu replacement is rofi:
|
|
||||||
# bindcode $mod+40 exec rofi -modi drun,run -show drun
|
|
||||||
# There also is i3-dmenu-desktop which only displays applications shipping a
|
|
||||||
# .desktop file. It is a wrapper around dmenu, so you need that installed.
|
|
||||||
bindcode $mod+40 exec --no-startup-id i3-dmenu-desktop
|
|
||||||
|
|
||||||
# change focus
|
|
||||||
bindcode $mod+44 focus left
|
|
||||||
bindcode $mod+45 focus down
|
|
||||||
bindcode $mod+46 focus up
|
|
||||||
bindcode $mod+47 focus right
|
|
||||||
|
|
||||||
# alternatively, you can use the cursor keys:
|
|
||||||
bindcode $mod+113 focus left
|
|
||||||
bindcode $mod+116 focus down
|
|
||||||
bindcode $mod+111 focus up
|
|
||||||
bindcode $mod+114 focus right
|
|
||||||
|
|
||||||
# move focused window
|
|
||||||
bindcode $mod+Shift+44 move left
|
|
||||||
bindcode $mod+Shift+45 move down
|
|
||||||
bindcode $mod+Shift+46 move up
|
|
||||||
bindcode $mod+Shift+47 move right
|
|
||||||
|
|
||||||
# alternatively, you can use the cursor keys:
|
|
||||||
bindcode $mod+Shift+113 move left
|
|
||||||
bindcode $mod+Shift+116 move down
|
|
||||||
bindcode $mod+Shift+111 move up
|
|
||||||
bindcode $mod+Shift+114 move right
|
|
||||||
|
|
||||||
# split in horizontal orientation
|
|
||||||
bindcode $mod+43 split h
|
|
||||||
|
|
||||||
# split in vertical orientation
|
|
||||||
bindcode $mod+55 split v
|
|
||||||
|
|
||||||
# enter fullscreen mode for the focused container
|
|
||||||
bindcode $mod+41 fullscreen toggle
|
|
||||||
|
|
||||||
# change container layout (stacked, tabbed, toggle split)
|
|
||||||
bindcode $mod+39 layout stacking
|
|
||||||
bindcode $mod+25 layout tabbed
|
|
||||||
bindcode $mod+26 layout toggle split
|
|
||||||
|
|
||||||
# toggle tiling / floating
|
|
||||||
bindcode $mod+Shift+65 floating toggle
|
|
||||||
|
|
||||||
# change focus between tiling / floating windows
|
|
||||||
bindcode $mod+65 focus mode_toggle
|
|
||||||
|
|
||||||
# focus the parent container
|
|
||||||
bindcode $mod+38 focus parent
|
|
||||||
|
|
||||||
# focus the child container
|
|
||||||
#bindsym $mod+d focus child
|
|
||||||
|
|
||||||
# Define names for default workspaces for which we configure key bindings later on.
|
|
||||||
# We use variables to avoid repeating the names in multiple places.
|
|
||||||
set $ws1 "1"
|
|
||||||
set $ws2 "2"
|
|
||||||
set $ws3 "3"
|
|
||||||
set $ws4 "4"
|
|
||||||
set $ws5 "5"
|
|
||||||
set $ws6 "6"
|
|
||||||
set $ws7 "7"
|
|
||||||
set $ws8 "8"
|
|
||||||
set $ws9 "9"
|
|
||||||
set $ws10 "10"
|
|
||||||
|
|
||||||
# switch to workspace
|
|
||||||
bindcode $mod+10 workspace number $ws1
|
|
||||||
bindcode $mod+11 workspace number $ws2
|
|
||||||
bindcode $mod+12 workspace number $ws3
|
|
||||||
bindcode $mod+13 workspace number $ws4
|
|
||||||
bindcode $mod+14 workspace number $ws5
|
|
||||||
bindcode $mod+15 workspace number $ws6
|
|
||||||
bindcode $mod+16 workspace number $ws7
|
|
||||||
bindcode $mod+17 workspace number $ws8
|
|
||||||
bindcode $mod+18 workspace number $ws9
|
|
||||||
bindcode $mod+19 workspace number $ws10
|
|
||||||
|
|
||||||
# move focused container to workspace
|
|
||||||
bindcode $mod+Shift+10 move container to workspace number $ws1
|
|
||||||
bindcode $mod+Shift+11 move container to workspace number $ws2
|
|
||||||
bindcode $mod+Shift+12 move container to workspace number $ws3
|
|
||||||
bindcode $mod+Shift+13 move container to workspace number $ws4
|
|
||||||
bindcode $mod+Shift+14 move container to workspace number $ws5
|
|
||||||
bindcode $mod+Shift+15 move container to workspace number $ws6
|
|
||||||
bindcode $mod+Shift+16 move container to workspace number $ws7
|
|
||||||
bindcode $mod+Shift+17 move container to workspace number $ws8
|
|
||||||
bindcode $mod+Shift+18 move container to workspace number $ws9
|
|
||||||
bindcode $mod+Shift+19 move container to workspace number $ws10
|
|
||||||
|
|
||||||
# reload the configuration file
|
|
||||||
bindcode $mod+Shift+54 reload
|
|
||||||
# restart i3 inplace (preserves your layout/session, can be used to upgrade i3)
|
|
||||||
bindcode $mod+Shift+27 restart
|
|
||||||
# exit i3 (logs you out of your X session)
|
|
||||||
bindcode $mod+Shift+26 exec "i3-nagbar -t warning -m 'You pressed the exit shortcut. Do you really want to exit i3? This will end your X session.' -B 'Yes, exit i3' 'i3-msg exit'"
|
|
||||||
|
|
||||||
# resize window (you can also use the mouse for that)
|
|
||||||
mode "resize" {
|
|
||||||
# These bindings trigger as soon as you enter the resize mode
|
|
||||||
|
|
||||||
# Pressing left will shrink the window’s width.
|
|
||||||
# Pressing right will grow the window’s width.
|
|
||||||
# Pressing up will shrink the window’s height.
|
|
||||||
# Pressing down will grow the window’s height.
|
|
||||||
bindcode 44 resize shrink width 10 px or 10 ppt
|
|
||||||
bindcode 45 resize grow height 10 px or 10 ppt
|
|
||||||
bindcode 46 resize shrink height 10 px or 10 ppt
|
|
||||||
bindcode 47 resize grow width 10 px or 10 ppt
|
|
||||||
|
|
||||||
# same bindings, but for the arrow keys
|
|
||||||
bindcode 113 resize shrink width 10 px or 10 ppt
|
|
||||||
bindcode 116 resize grow height 10 px or 10 ppt
|
|
||||||
bindcode 111 resize shrink height 10 px or 10 ppt
|
|
||||||
bindcode 114 resize grow width 10 px or 10 ppt
|
|
||||||
|
|
||||||
# back to normal: Enter or Escape or $mod+r
|
|
||||||
bindcode 36 mode "default"
|
|
||||||
bindcode 9 mode "default"
|
|
||||||
bindcode $mod+27 mode "default"
|
|
||||||
}
|
|
||||||
|
|
||||||
bindcode $mod+27 mode "resize"
|
|
||||||
|
|
||||||
# Start i3bar to display a workspace bar (plus the system information i3status
|
|
||||||
# finds out, if available)
|
|
||||||
bar {
|
|
||||||
status_command i3status
|
|
||||||
}
|
|
|
@ -0,0 +1,152 @@
|
||||||
|
(include "hooks.scm")
|
||||||
|
|
||||||
|
(display "-- GUILE CONFIGURATION START LOADING --\n")
|
||||||
|
|
||||||
|
(define (run-shell-command c)
|
||||||
|
(system (string-concatenate
|
||||||
|
(list c " &"))))
|
||||||
|
|
||||||
|
;; (include "i3.scm")
|
||||||
|
(define font "pango:Fira Mono 12")
|
||||||
|
;; (run-shell-command "./i3bar -b 0")
|
||||||
|
|
||||||
|
;; (set-font )
|
||||||
|
|
||||||
|
(define (reload)
|
||||||
|
(display "Reloading (with refresh)!\n")
|
||||||
|
(load "config.scm")
|
||||||
|
(refresh))
|
||||||
|
|
||||||
|
(define (urxvt)
|
||||||
|
(display "Starting urxvt\n")
|
||||||
|
(run-shell-command "urxvt"))
|
||||||
|
|
||||||
|
;; (define (config-bars)
|
||||||
|
;; (bar-start)
|
||||||
|
;; (set-bar-position "top")
|
||||||
|
;; (bar-finish)
|
||||||
|
;; ;; 2 bars
|
||||||
|
;; (bar-start)
|
||||||
|
;; (set-bar-position "bottom")
|
||||||
|
;; (bar-finish)
|
||||||
|
;; (i3bar))
|
||||||
|
|
||||||
|
;; ;; (i3bar)
|
||||||
|
;; ;; (i3-exec "" "" urxvt)
|
||||||
|
|
||||||
|
;; (define (cw)
|
||||||
|
;; (change-workspace "3"))
|
||||||
|
|
||||||
|
(define (cw1)
|
||||||
|
(change-workspace "1"))
|
||||||
|
|
||||||
|
(define (cw2)
|
||||||
|
(let ((resp (change-workspace "2")))
|
||||||
|
(if (not (boolean? resp))
|
||||||
|
(format #f "~A ~A" (car resp) (cadr resp)))))
|
||||||
|
|
||||||
|
(define (cwz)
|
||||||
|
(let ((resp (change-workspace "z")))
|
||||||
|
(if (not (boolean? resp))
|
||||||
|
(format #f "~A ~A" (car resp) (cadr resp)))))
|
||||||
|
|
||||||
|
;; (define (default)
|
||||||
|
;; (change-workspace "default"))
|
||||||
|
|
||||||
|
(use-modules (ice-9 popen))
|
||||||
|
(use-modules (ice-9 rdelim))
|
||||||
|
|
||||||
|
(define (run-and-read command)
|
||||||
|
(let* ((port (open-input-pipe command))
|
||||||
|
(str (read-line port))) ; from (ice-9 rdelim)
|
||||||
|
(close-pipe port)
|
||||||
|
str))
|
||||||
|
|
||||||
|
(define (eval-expr)
|
||||||
|
(run-shell-command (format #f "./i3-msg ~S" (run-and-read "echo '' | dmenu"))))
|
||||||
|
|
||||||
|
(set-binding "bindsym" "Mod1" "Return" "" "" "" ""
|
||||||
|
(lambda () (urxvt)))
|
||||||
|
|
||||||
|
(set-binding "bindsym" "Mod1" "space" "" "" "" ""
|
||||||
|
(lambda () (eval-expr)))
|
||||||
|
|
||||||
|
(set-binding "bindsym" "Mod1" "r" "" "" "" ""
|
||||||
|
(lambda () (reload)))
|
||||||
|
|
||||||
|
(set-binding "bindsym" "Mod1" "1" "" "" "" ""
|
||||||
|
(lambda () (cw1)))
|
||||||
|
(set-binding "bindsym" "Mod1" "2" "" "" "" ""
|
||||||
|
(lambda () (cw2)))
|
||||||
|
(set-binding "bindsym" "Mod1" "z" "" "" "" ""
|
||||||
|
(lambda () (cwz)))
|
||||||
|
|
||||||
|
(set-binding "bindsym" "Mod1" "v" "" "" "" ""
|
||||||
|
(lambda () (split "vertical")))
|
||||||
|
(set-binding "bindsym" "Mod1" "h" "" "" "" ""
|
||||||
|
(lambda () (split "horizontal")))
|
||||||
|
|
||||||
|
(set-binding "bindsym" "Mod1" "q" "" "" "" ""
|
||||||
|
(lambda () (kill)))
|
||||||
|
|
||||||
|
(set-binding "bindsym" "Mod1" "Right" "" "" "" ""
|
||||||
|
(lambda () (focus-direction "right")))
|
||||||
|
|
||||||
|
(set-binding "bindsym" "Mod1" "Left" "" "" "" ""
|
||||||
|
(lambda () (focus-direction "left")))
|
||||||
|
|
||||||
|
(set-binding "bindsym" "Mod1" "Up" "" "" "" ""
|
||||||
|
(lambda () (focus-direction "up")))
|
||||||
|
|
||||||
|
(set-binding "bindsym" "Mod1" "Down" "" "" "" ""
|
||||||
|
(lambda () (focus-direction "down")))
|
||||||
|
|
||||||
|
(set-binding "bindsym" "Mod1" "w" "" "" "" ""
|
||||||
|
(lambda () (layout "tabbed")))
|
||||||
|
(set-binding "bindsym" "Mod1" "s" "" "" "" ""
|
||||||
|
(lambda () (layout "stacked")))
|
||||||
|
(set-binding "bindsym" "Mod1" "e" "" "" "" ""
|
||||||
|
(lambda () (toggle-layout "split")))
|
||||||
|
|
||||||
|
;; (set-binding "bindsym" "Mod1" "o" "" "" "" ""
|
||||||
|
;; (lambda () (move-to-workspace "2")))
|
||||||
|
|
||||||
|
(display "Loaded\n")
|
||||||
|
;; (set-binding "bindsym" "Mod2" "Return" "" "" "" "" urxvt)
|
||||||
|
|
||||||
|
;; (set-binding "bindsym" "Mod1" "q" "" "" "" "" kill-window)
|
||||||
|
;; (set-binding "bindsym" "Mod1" "w" "" "" "" "" kill-client)
|
||||||
|
;; (set-binding "bindsym" "Mod1" "1" "" "" "" "" default)
|
||||||
|
;; (set-binding "bindsym" "Mod1" "2" "" "" "" "" cw2)
|
||||||
|
;; (set-binding "bindsym" "Mod1" "3" "" "" "" "" cw)
|
||||||
|
|
||||||
|
;; ;; Con *ws = con_get_workspace(nc)
|
||||||
|
;; ;; Con *fs = con_get_fullscreen_covering_ws(ws)
|
||||||
|
;; ;; con_move_to_output(nc, output, false);
|
||||||
|
;; ;; con_toggle_fullscreen(nc, CF_OUTPUT);
|
||||||
|
;; ;; con_move_to_output_name(nc, assignment->dest.output, true);
|
||||||
|
|
||||||
|
;; (define (move-to-workspace window workspace)
|
||||||
|
;; (display "Moving window ")
|
||||||
|
;; (display (window-name window))
|
||||||
|
;; (display " to workspace ")
|
||||||
|
;; (display workspace))
|
||||||
|
|
||||||
|
;; (define assignments
|
||||||
|
;; ;; #((matcher) assign-function)
|
||||||
|
;; `(("urxvt" ,(lambda () (move-to-workspace "O" "3")))))
|
||||||
|
|
||||||
|
;; ;; ((lambda () (+ 2 1)))
|
||||||
|
|
||||||
|
;; ;; (define (t i) (display ("ICAO")))
|
||||||
|
|
||||||
|
;; ;; ((eval '+) 1 2)
|
||||||
|
|
||||||
|
;; ;; (call-with-values (cdr `("urxvt" ,t)) 0)
|
||||||
|
|
||||||
|
;; (display "-- GUILE CONFIGURATION LOADED --\n")
|
||||||
|
(define loaded #t)
|
||||||
|
|
||||||
|
(run-shell-command "feh --bg-fill ~/freeze/bluescreen_0.png")
|
||||||
|
|
||||||
|
;; (split "vertical")
|
|
@ -0,0 +1,11 @@
|
||||||
|
(define (enter-notify-hook params)
|
||||||
|
"Function called each time the mouse focus changes window.
|
||||||
|
Param is a list with: the name of the window.
|
||||||
|
Return #f to prevent changing focus."
|
||||||
|
(not (string=? (car params) "no-focus")))
|
||||||
|
|
||||||
|
(define (click-hook params)
|
||||||
|
;; (format #t "Clicked ~A" (car params))
|
||||||
|
;; (let ((root-x root-y event-x event-y state same-screen)))
|
||||||
|
|
||||||
|
(not (string=? (car params) "no-focus")))
|
|
@ -0,0 +1,2 @@
|
||||||
|
SCM guile_split(SCM direction);
|
||||||
|
bool guile_hook(char * name, SCM params);
|
|
@ -18,6 +18,7 @@ sources = [
|
||||||
'src/fake_outputs.c',
|
'src/fake_outputs.c',
|
||||||
'src/floating.c',
|
'src/floating.c',
|
||||||
'src/handlers.c',
|
'src/handlers.c',
|
||||||
|
'src/guile.c',
|
||||||
'src/ipc.c',
|
'src/ipc.c',
|
||||||
'src/key_press.c',
|
'src/key_press.c',
|
||||||
'src/load_layout.c',
|
'src/load_layout.c',
|
||||||
|
|
29
src/click.c
29
src/click.c
|
@ -11,7 +11,8 @@
|
||||||
|
|
||||||
#include <time.h>
|
#include <time.h>
|
||||||
|
|
||||||
#include "guile-objects.h"
|
#include "guile.h"
|
||||||
|
#include <libguile.h>
|
||||||
|
|
||||||
typedef enum { CLICK_BORDER = 0,
|
typedef enum { CLICK_BORDER = 0,
|
||||||
CLICK_DECORATION = 1,
|
CLICK_DECORATION = 1,
|
||||||
|
@ -309,19 +310,25 @@ void handle_button_press(xcb_button_press_event_t *event) {
|
||||||
|
|
||||||
last_timestamp = event->time;
|
last_timestamp = event->time;
|
||||||
|
|
||||||
// Click hook
|
|
||||||
SCM hook = scm_variable_ref(scm_c_lookup("button-press-hook"));
|
|
||||||
if (scm_is_true(hook)) {
|
|
||||||
scm_call_6(hook,
|
|
||||||
scm_from_int(event->root_x), scm_from_int(event->root_y),
|
|
||||||
scm_from_int(event->event_x), scm_from_int(event->event_y),
|
|
||||||
scm_from_int(event->state), scm_from_int(event->same_screen));
|
|
||||||
}
|
|
||||||
|
|
||||||
const uint32_t mod = (config.floating_modifier & 0xFFFF);
|
const uint32_t mod = (config.floating_modifier & 0xFFFF);
|
||||||
const bool mod_pressed = (mod != 0 && (event->state & mod) == mod);
|
const bool mod_pressed = (mod != 0 && (event->state & mod) == mod);
|
||||||
DLOG("floating_mod = %d, detail = %d\n", mod_pressed, event->detail);
|
DLOG("floating_mod = %d, detail = %d\n", mod_pressed, event->detail);
|
||||||
if ((con = con_by_window_id(event->event))) {
|
|
||||||
|
con = con_by_window_id(event->event);
|
||||||
|
|
||||||
|
// Click hook
|
||||||
|
if (!guile_hook
|
||||||
|
("click-hook", scm_list_3
|
||||||
|
(scm_from_utf8_string(i3string_as_utf8(con->window->name)),
|
||||||
|
scm_from_int(event->root_x), scm_from_int(event->root_y)))) {
|
||||||
|
// Ignore the click
|
||||||
|
xcb_allow_events(conn, XCB_ALLOW_REPLAY_POINTER, event->time);
|
||||||
|
xcb_flush(conn);
|
||||||
|
tree_render();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (con) {
|
||||||
route_click(con, event, mod_pressed, CLICK_INSIDE);
|
route_click(con, event, mod_pressed, CLICK_INSIDE);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,2 +0,0 @@
|
||||||
|
|
||||||
SCM guile_split(SCM direction);
|
|
|
@ -0,0 +1,12 @@
|
||||||
|
#include "all.h"
|
||||||
|
|
||||||
|
#include <libguile.h>
|
||||||
|
#include "guile.h"
|
||||||
|
|
||||||
|
bool guile_hook(char * name, SCM params) {
|
||||||
|
SCM hook = scm_variable_ref(scm_c_lookup(name));
|
||||||
|
if (scm_is_true(hook)) {
|
||||||
|
return scm_to_bool(scm_call_1(hook, params));
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
|
@ -17,6 +17,8 @@
|
||||||
#define SN_API_NOT_YET_FROZEN 1
|
#define SN_API_NOT_YET_FROZEN 1
|
||||||
#include <libsn/sn-monitor.h>
|
#include <libsn/sn-monitor.h>
|
||||||
|
|
||||||
|
#include "guile.h"
|
||||||
|
|
||||||
int randr_base = -1;
|
int randr_base = -1;
|
||||||
int xkb_base = -1;
|
int xkb_base = -1;
|
||||||
int xkb_current_group;
|
int xkb_current_group;
|
||||||
|
@ -121,7 +123,7 @@ static void check_crossing_screen_boundary(uint32_t x, uint32_t y) {
|
||||||
* When the user moves the mouse pointer onto a window, this callback gets called.
|
* When the user moves the mouse pointer onto a window, this callback gets called.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
static void handle_enter_notify(xcb_enter_notify_event_t *event) {
|
static void handle_enter_notify(xcb_enter_notify_event_t *event) {
|
||||||
Con *con;
|
Con *con;
|
||||||
|
|
||||||
last_timestamp = event->time;
|
last_timestamp = event->time;
|
||||||
|
@ -162,13 +164,20 @@ static void handle_enter_notify(xcb_enter_notify_event_t *event) {
|
||||||
Con *child;
|
Con *child;
|
||||||
TAILQ_FOREACH_REVERSE (child, &(con->nodes_head), nodes_head, nodes) {
|
TAILQ_FOREACH_REVERSE (child, &(con->nodes_head), nodes_head, nodes) {
|
||||||
if (rect_contains(child->deco_rect, event->event_x, event->event_y)) {
|
if (rect_contains(child->deco_rect, event->event_x, event->event_y)) {
|
||||||
LOG("using child %p / %s instead!\n", child, child->name);
|
printf("using child %p / %s instead!\n", child, child->name);
|
||||||
con = child;
|
con = child;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Run external guile hook, and stop handling the event if necessary
|
||||||
|
if(con->window != NULL &&
|
||||||
|
!guile_hook("enter-notify-hook",
|
||||||
|
scm_list_1(scm_from_utf8_string(i3string_as_utf8(con->window->name))))) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (config.disable_focus_follows_mouse)
|
if (config.disable_focus_follows_mouse)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
|
|
@ -26,7 +26,7 @@
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
|
||||||
#include <libguile.h>
|
#include <libguile.h>
|
||||||
#include "guile-objects.h"
|
#include "guile.h"
|
||||||
|
|
||||||
#ifdef I3_ASAN_ENABLED
|
#ifdef I3_ASAN_ENABLED
|
||||||
#include <sanitizer/lsan_interface.h>
|
#include <sanitizer/lsan_interface.h>
|
||||||
|
|
Loading…
Reference in New Issue