I showed you my source code, pls respond
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

3.8 KiB

Desktop

I use Emacs as a Desktop Environment with the EXWM1 package. It allows Emacs to function as a complete tiling window manager for X112.

Initialization

My workflow includes launching the window manager with Xinit3, without the use of a display manager, controlling everything within Emacs.

exec dbus-launch --exit-with-session emacs -mm --debug-init

Create a symbolic link

Xinit3 reads its configuration from ~/.xinitrc. Override this location with a link to the custom configuration.

(dotfiles/symlink "~/.emacs.d/config/xinitrc"
                  "~/.xinitrc")

Browser integration

Write out the $BROWSER variable so other applications can pick up the custom browser.

(setenv "BROWSER" dotfiles/browser)

Browse URL keybindings

Create a custom keybinding for browsing the urls behind SPC u:

  • URL with u

  • Point with p

  • Cursor with c

(dotfiles/leader
  "u" '(:ignore t :which-key "Browse")
  "uu" '(browse-url :which-key "URL")
  "up" '(browse-url-at-point :which-key "Point")
  "uc" '(browse-url-at-cursor :which-key "Cursor"))

Displays detection

When the window manager first launches the init-hook executes, allowing us to define some custom logic.

  • Display time and date

  • Display battery info (if available)

In my personal configuration, I do not want the battery or time displayed within Emacs when it's not running as desktop environment because that information is typically already available.

(defun dotfiles/init-hook ()
  (exwm-workspace-switch-create 1)
  (setq display-time-and-date t)
  (display-battery-mode 1)
  (display-time-mode 1))

Using autorandr with pre configured profiles, switching screens (AKA hot plugging) is also handled through a hook.

(defun dotfiles/update-display ()
  "Update the displays by forcing a change through autorandr."
  (dotfiles/run-in-background "autorandr --change --force"))

Window manager

Connect our custom hooks and configure the input keys, a custom layer for key capture layers.

  • Enable randr support

  • Pass through to Emacs

    • M-x to Emacs

    • C-g to Emacs

    • C-SPC to Emacs

  • Bindings with S (Super / Win)

    • Reset S-r

    • Launch S-&

    • Workspace S-[1..9]

(use-package exwm
  :when (window-system)
  :custom (exwm-workspace-show-all-buffers t)
          (exwm-input-prefix-keys
            '(?\M-x
              ?\C-g
              ?\C-\ ))
          (exwm-input-global-keys
            `(([?\s-r] . exwm-reset)
              ,@(mapcar (lambda (i)
                          `(,(kbd (format "s-%d" i)) .
                          (lambda ()
                          (interactive)
                          (exwm-workspace-switch-create ,i))))
                          (number-sequence 1 9))))
  :config (require 'exwm-randr)
          (exwm-randr-enable)
          (add-hook 'exwm-init-hook #'dotfiles/init-hook)
          (add-hook 'exwm-randr-screen-change-hook #'dotfiles/update-display)
          (add-hook 'exwm-update-class-hook (lambda () (exwm-workspace-rename-buffer exwm-class-name)))
          (dotfiles/update-display)
          (exwm-enable))

Resources