From b4e6518f7eff38d57d2ce5500fb6292d90e000f6 Mon Sep 17 00:00:00 2001 From: Case Duckworth Date: Mon, 16 Jan 2023 12:46:27 -0600 Subject: KEY SMASHSHHHH --- basics.el | 132 +++++++++++++---------------- init.el | 237 ++++++++++++++++++++++++++--------------------------- lisp/acdw-shell | 0 lisp/acdw-shell.el | 141 +++++++++++++++++++++++++++++++ lisp/acdw-web.el | 28 +++++++ 5 files changed, 346 insertions(+), 192 deletions(-) create mode 100644 lisp/acdw-shell create mode 100644 lisp/acdw-shell.el create mode 100644 lisp/acdw-web.el diff --git a/basics.el b/basics.el index 7b4b1fd..24e5047 100644 --- a/basics.el +++ b/basics.el @@ -31,6 +31,7 @@ (setq-default no-littering-etc-directory etc/ no-littering-var-directory etc/)) + ;;; Settings ;; Async @@ -38,18 +39,17 @@ async-shell-command-display-buffer nil) ;; Scrolling -(setq-default auto-hscroll-mode t - auto-window-vscroll nil - fast-but-imprecise-scrolling t - hscroll-margin 1 - hscroll-step 1 - scroll-conservatively 25 - scroll-margin 0 - scroll-preserve-screen-position 1 - scroll-step 1) +(setq-default auto-hscroll-mode t + auto-window-vscroll nil + fast-but-imprecise-scrolling t + hscroll-margin 1 + hscroll-step 1 + scroll-conservatively 25 + scroll-margin 0 + scroll-preserve-screen-position 1 + scroll-step 1) (scroll-bar-mode -1) (horizontal-scroll-bar-mode -1) -(pixel-scroll-precision-mode) ;; Cursor (setq-default cursor-in-non-selected-windows 'hollow @@ -95,7 +95,6 @@ (add-hook 'minibuffer-setup-hook #'truncate-lines-local-mode) - (require 'savehist) (setq-default history-length 1024 history-delete-duplicates t @@ -233,8 +232,15 @@ ;; Whitespace (require 'whitespace) (setq-default whitespace-style - '(face trailing tabs space-after-tab space-before-tab tab-mark)) + '(face trailing tabs tab-mark)) (global-whitespace-mode) +(add-hook 'before-save-hook + (defun delete-trailing-whitespace-except-current-line () + (save-excursion + (delete-trailing-whitespace (point-min) + (line-beginning-position)) + (delete-trailing-whitespace (line-end-position) + (point-max))))) ;; Native compilation (setq-default native-comp-async-report-warnings-errors 'silent @@ -261,6 +267,7 @@ ;; Winner (winner-mode) + ;;; Keybindings (defun other-window|switch-buffer (arg) @@ -321,6 +328,7 @@ N spaces." (global-set-key (kbd "C-x C-b") #'ibuffer) + ;;; Hooks (add-hook 'after-save-hook #'executable-make-buffer-file-executable-if-script-p) @@ -338,6 +346,7 @@ N spaces." (when (file-remote-p (buffer-file-name)) (setq-local vc-handled-backends nil)))) + ;;; Advice (define-advice switch-to-buffer (:after (&rest _) normal-mode) @@ -352,51 +361,7 @@ N spaces." (let ((sentence-end-double-space t)) (apply orig args))) -;; With region or ... -(defun advise-region-or-buffer (&rest _) - "`:before' advice to work on the active region or whole buffer. -See also `with-region-or-buffer'." - (interactive (if mark-active - (list (region-beginning) (region-end)) - (list (point-min) (point-max))))) - -(defun advise-region-or-line (&rest _) - "`:before' advice to work on the active region or whole line. -See also `with-region-or-line'." - (interactive (if mark-active - (list (region-beginning) (region-end)) - (list (line-beginning-position) (line-end-position))))) - -(defun advise-region-or-to-eol (&rest _) - "`:before' advice to work on the active region or to end of line. -See also `with-region-or-to-eol'." - (INTERACTIVE (if mark-active - (list (region-beginning) (region-end)) - (list (point) (line-end-position))))) - -(defmacro with-region-or-buffer (&rest funcs) - "Advise FUNCS with `advise-region-or-buffer'." - `(progn - ,@(cl-loop for fn in funcs - collect - `(advice-add ',fn :before #'advise-region-or-buffer)))) - -(defmacro with-region-or-line (&rest funcs) - "Advise FUNCS with `advise-region-or-line'." - `(progn - ,@(cl-loop for fn in funcs - collect - `(advice-add ',fn :before #'advise-region-or-line)))) - -(defmacro with-region-or-to-eol (&rest funcs) - "Advise FUNCS with `advise-region-or-to-eol'." - `(progn - ,@(cl-loop for fn in funcs - collect - `(advice-add ',fn :before #'advise-region-or-to-eol)))) - -(with-region-or-buffer indent-region) - + ;;; Packages (use-package _acdw @@ -460,23 +425,23 @@ See also `with-region-or-to-eol'." ("C-c k" . consult-kmacro) ;; C-x bindings (ctl-x-map) ("C-x M-:" . consult-complex-command) - ("C-x b" . consult-buffer) + ("C-x b" . consult-buffer) ("C-x 4 b" . consult-buffer-other-window) - ("C-x 5 b" . consult-buffer-other-frame) - ("C-x r b" . consult-bookmark) - ("C-x p b" . consult-project-buffer) + ("C-x 5 b" . consult-buffer-other-frame) + ("C-x r b" . consult-bookmark) + ("C-x p b" . consult-project-buffer) ;; Custom M-# bindings for fast register access ("M-#" . consult-register-load) - ("M-'" . consult-register-store) + ("M-'" . consult-register-store) ("C-M-#" . consult-register) ;; Other custom bindings - ("M-y" . consult-yank-pop) + ("M-y" . consult-yank-pop) ;; M-g bindings (goto-map) ("M-g e" . consult-compile-error) - ("M-g f" . consult-flymake) - ("M-g g" . consult-goto-line) - ("M-g M-g" . consult-goto-line) - ("M-g o" . consult-outline) + ("M-g f" . consult-flymake) + ("M-g g" . consult-goto-line) + ("M-g M-g" . consult-goto-line) + ("M-g o" . consult-outline) ("M-g m" . consult-mark) ("M-g k" . consult-global-mark) ("M-g i" . consult-imenu) @@ -494,14 +459,14 @@ See also `with-region-or-to-eol'." ;; Isearch integration ("M-s e" . consult-isearch-history) :map isearch-mode-map - ("M-e" . consult-isearch-history) - ("M-s e" . consult-isearch-history) - ("M-s l" . consult-line) - ("M-s L" . consult-line-multi) + ("M-e" . consult-isearch-history) + ("M-s e" . consult-isearch-history) + ("M-s l" . consult-line) + ("M-s L" . consult-line-multi) ;; Minibuffer history :map minibuffer-local-map - ("M-s" . consult-history) - ("M-r" . consult-history)) + ("M-s" . consult-history) + ("M-r" . consult-history)) ;; Enable automatic preview at point in the *Completions* buffer. This is ;; relevant when you use the default completion UI. @@ -603,4 +568,25 @@ See also `with-region-or-to-eol'." "/git-rebase-todo\\'")) (global-undo-fu-session-mode)) +(use-package crux + :ensure t :demand t + :bind (("C-o" . crux-smart-open-line) + ("C-x 4 t" . crux-transpose-windows)) + :config + (crux-with-region-or-buffer indent-region) + (crux-with-region-or-buffer tabify) + (crux-with-region-or-buffer untabify) + (crux-reopen-as-root-mode)) + +(use-package pixel-scroll + :demand t + :bind (([right-margin wheel-down] . pixel-scroll-precision) + ([right-margin double-wheel-down] . pixel-scroll-precision) + ([right-margin triple-wheel-down] . pixel-scroll-precision) + ([right-margin wheel-up] . pixel-scroll-precision) + ([right-margin double-wheel-up] . pixel-scroll-precision) + ([right-margin triple-wheel-up] . pixel-scroll-precision)) + :config + (pixel-scroll-precision-mode)) + ;;; basics.el ends here diff --git a/init.el b/init.el index f114adf..617de47 100644 --- a/init.el +++ b/init.el @@ -13,9 +13,10 @@ (setopt tab-bar-show 1 recenter-positions '(top middle bottom) initial-scratch-message - (mapconcat (lambda (s) (format ";; %s" s)) - (process-lines "fortune") - "\n")) + (format "%s\n\n" + (mapconcat (lambda (s) (format ";; %s" s)) + (process-lines "fortune" "-s") + "\n"))) (keymap-global-unset "C-\\") (add-hook 'kill-buffer-query-functions (defun scratch@immortal () @@ -27,6 +28,8 @@ :config (add-hook 'server-after-make-frame-hook (defun first-frame@set-fonts () + (remove-hook 'server-after-make-frame-hook + #'first-frame@set-fonts) (face-spec-set 'fixed-pitch `((t :family ,(find-font "Comic Code" "DejaVu Sans Mono") @@ -73,7 +76,9 @@ (telugu . "Noto Sans Telugu") (tibetan . "Noto Sans Tibetan")) if (member font ffl) - do (set-fontset-font t charset font))))) + do (set-fontset-font t charset font)))) + (unless (daemonp) + (run-with-idle-timer 1 nil #'first-frame@set-fonts))) (use-package text-mode :config @@ -81,6 +86,8 @@ (use-package prog-mode :config + (setopt tab-width 8 + sh-indentation tab-width) (add-hook 'prog-mode-hook #'auto-fill-mode) (add-hook 'prog-mode-hook (defun prog@indent-tabs-maybe () @@ -90,63 +97,6 @@ 'haskell-mode) -1 1))))) -(use-package eshell - :preface - ;; TODO: Break this out into its own package (eshell-pop?). This may not work - ;; the way I want it to sometimes .. but then, I don't know how I want it to - ;; work sometimes either. More testing, clearly, is needed. - (defvar eshell-buffer-format "*eshell:%s*" - "Format for eshell buffer names.") - (defun eshell-rename-pwd () - (rename-buffer (format eshell-buffer-format default-directory) t)) - (defun eshell-last-dir () - (goto-char (point-max)) - (insert "cd -") - (eshell-send-input)) - (defun eshellp (buffer-or-name) - (with-current-buffer buffer-or-name - (derived-mode-p 'eshell-mode))) - (defun +eshell (&optional new) - (interactive "P") - (let ((dir default-directory) - (bname (format eshell-buffer-format default-directory)) - (display-comint-buffer-action 'pop-to-buffer)) - (if-let ((buf (and (not new) - (or (get-buffer bname) - (seq-find #'eshellp - (reverse (buffer-list))))))) - (pop-to-buffer buf) - (eshell new)) - (eshell-rename-pwd) - (unless (equal default-directory dir) - (goto-char (point-max)) - (insert (format "cd %s" dir)) - (eshell-send-input)))) - (defun +eshell-quit (&optional choose) - (interactive "P") - (if choose - (let* ((bufs (mapcar #'buffer-name - (seq-filter #'eshellp - (buffer-list)))) - (buf (get-buffer - (completing-read "Eshell: " - bufs nil t nil nil (car bufs))))) - (quit-window) - (pop-to-buffer buf)) - (quit-window))) - :init - (add-hook 'eshell-post-command-hook #'eshell-rename-pwd) - :commands eshell - :bind (("C-z" . +eshell) - :map eshell-mode-map - ("C-z" . +eshell-quit) - ("C-o" . eshell-last-dir)) - :config - (add-hook 'eshell-mode-hook - (defun eshell-setup () - (setq-local imenu-generic-expression - '(("Prompt" " $ \\(.*\\)" 1)))))) - (use-package auth-source :config (setopt auth-sources '(default "secrets:passwords")) @@ -159,24 +109,6 @@ (use-package flyspell :hook org-mode-hook) -(use-package browse-url - :preface - (defcustom +browse-url-other-safe-browser-functions nil - "Other safe browser functions." - :type '(repeat function)) - (defun +browse-url-browser-function-safe-p (f) - "Return t if F is a safe browser function." - (memq f (append +browse-url-other-safe-browser-functions - (mapcar (lambda (i) - (plist-get (cdr i) :value)) - (seq-filter (lambda (i) - (eq (car i) 'function-item)) - (cdr (get 'browse-url-browser-function - 'custom-type))))))) - :config - (put 'browse-url-browser-function 'safe-local-variable - '+browse-url-browser-function-safe-p)) - (use-package dired :bind (("C-x C-j" . dired-jump) ([remap list-directory] . dired) @@ -206,6 +138,63 @@ (add-hook 'dired-mode-hook #'hl-line-mode) (add-hook 'dired-mode-hook #'truncate-lines-local-mode)) +(use-package dictionary + :custom + (dictionary-server (if (or (executable-find "dictd") + (file-exists-p "/usr/sbin/dictd")) ; debian + "localhost" + "dict.org")) + :bind + (("C-c d" . dictionary-search))) + +(use-package mouse + :config + (setopt context-menu-functions '(context-menu-undo + context-menu-region + context-menu-middle-separator + context-menu-local + context-menu-minor)) + (context-menu-mode)) + +(use-package password-cache + :config + (setopt password-cache t + password-cache-expiry 3600)) + +(use-package time + :config + (setopt display-time-format " %H:%M" + display-time-mail-function + (defun +notmuch-new-mail-p () + (plist-get (cl-find "inbox+unread" + (ignore-errors + (notmuch-hello-query-counts notmuch-saved-searches)) + :key (lambda (l) (plist-get l :name)) + :test #'equal) + :count)) + display-time-default-load-average nil) + (display-time-mode)) + + +;;; Applications + +(use-package acdw-mail + :load-path "lisp/" + :demand t + :bind (("C-c n" . +notmuch-goto))) + +(use-package acdw-org + :load-path "lisp/") + +(use-package acdw-shell + :load-path "lisp/") + +(use-package acdw-web + :load-path "lisp/") + +(use-package _work + :load-path "~/Sync/emacs/private/") + ;;; Locally-developed packages @@ -284,7 +273,7 @@ With prefix ARG, toggle the value of (global-frowny-mode)) (use-package jabber - :load-path "~/src/emacs/emacs-jabber/" + :load-path "~/src/emacs/jabber/" :preface (defvar jabber-prefix-width 10 "Width of jabber prompts and other prefixes.") @@ -300,7 +289,7 @@ With prefix ARG, toggle the value of (jabber-activity-face ((t :inherit jabber-chat-prompt-foreign :foreground unspecified :weight normal))) - (jabber-activity-personal-face ((t :inherit font-lock-warning-face + (jabber-activity-personal-face ((t :inherit jabber-chat-prompt-local :foreground unspecified :weight bold))) (jabber-chat-prompt-local ((t :inherit font-lock-warning-face @@ -323,21 +312,15 @@ With prefix ARG, toggle the value of ("Mode #.*" . jabber-muc-presence-dim) ("." . jabber-muc-presence-dim)) jabber-activity-make-strings #'jabber-activity-make-strings-shorten - jabber-last-read-marker (make-string fill-column ?-) jabber-rare-time-format " - - - - - - %H:%M %F" ;; buffer name formats - jabber-chat-buffer-format "%n " - jabber-browse-buffer-format "%n " - jabber-groupchat-buffer-format "%n " - jabber-muc-private-buffer-format "%n " + ;; jabber-chat-buffer-format "%n " + ;; jabber-browse-buffer-format "%n " + ;; jabber-groupchat-buffer-format "%n " + ;; jabber-muc-private-buffer-format "%n " ;; "prompt" (speaker) formats jabber-groupchat-prompt-format (format "%%>%dn | " jabber-prefix-width) jabber-chat-local-prompt-format (format "%%>%dn | " jabber-prefix-width) - jabber-chat-system-prompt-format (let ((s "")) - (while (< (length s) - jabber-prefix-width) - (setq s (concat s " *"))) - s) jabber-chat-foreign-prompt-format (format "%%>%dn | " jabber-prefix-width) jabber-muc-private-foreign-prompt-format "\n%g/%n | ") (add-hook 'jabber-chat-mode-hook #'jabber-ui-setup) @@ -355,7 +338,8 @@ With prefix ARG, toggle the value of word-boundary))) (hi-lock-unface-buffer regexp) (highlight-regexp regexp 'font-lock-warning-face)))))) - (add-hook 'window-configuration-change-hook #'jabber-chat-update-focus)) + (when (fboundp 'jabber-chat-update-focus) + (add-hook 'window-configuration-change-hook #'jabber-chat-update-focus))) (use-package keepassxc-shim :load-path "~/src/emacs/keepassxc-shim/" @@ -365,10 +349,18 @@ With prefix ARG, toggle the value of ;;; External packages +(use-package trashed + :ensure t) + (use-package form-feed :ensure t - :hook (emacs-lisp-mode-hook - jabber-chat-mode-hook)) + :hook (emacs-lisp-mode-hook)) + +(use-package clean-kill-ring + :vc (:url "https://github.com/NicholasBHubbard/clean-kill-ring.el") + :config + (setopt clean-kill-ring-prevent-duplicates t) + (clean-kill-ring-mode)) (use-package minions :ensure t @@ -407,15 +399,6 @@ With prefix ARG, toggle the value of (advice-add 'emacs-completion-at-point :around #'cape-wrap-nonexclusive)) -(use-package ws-butler - :ensure t - :config - (setopt ws-butler-trim-predicate - (lambda (begin end) - (not (eq 'font-lock-string-face - (get-text-property end 'face))))) - (ws-butler-global-mode)) - (use-package wgrep :ensure t :config @@ -563,10 +546,6 @@ With prefix ARG, toggle the value of (setopt sly-net-coding-system 'utf-8-unix) (sly-symbol-completion-mode -1)) -(use-package eat - :ensure t - :hook (eshell-load-hook . eat-eshell-mode)) - (use-package pdf-tools :ensure t :mode ("\\.[pP][dD][fF]\\'" . pdf-view-mode) @@ -722,16 +701,36 @@ With PREFIX, prompt to change the current dictionary." (emacs-lisp-mode-hook . embrace-emacs-lisp-mode-hook) (latex-mode-hook . embrace-LaTeX-mode-hook))) - -;;; Applications - -(use-package acdw-mail - :load-path "lisp/" - :demand t - :bind (("C-c n" . +notmuch-goto))) - -(use-package acdw-org - :load-path "lisp/") +(use-package apheleia + :ensure t + :config + (setopt apheleia-hide-log-buffers t) + (setf (alist-get 'shfmt apheleia-formatters) + '("shfmt" "--case-indent")) + (global-set-key (kbd "M-C-\\") + (defun +apheleia-format|indent-buffer () + (interactive) + (if-let ((formatters (apheleia--get-formatters))) + (apheleia-format-buffer + formatters + (lambda () + (with-demoted-errors "Apheleia: %s" + (when buffer-file-name + (let ((apheleia--format-after-save-in-progress t)) + (apheleia--save-buffer-silently))) + (run-hooks 'apheleia-post-format-hook)))) + (indent-region (point-min) (point-max)) + (when buffer-file-name + (save-buffer)))))) + +(use-package php-mode + :ensure t) -(use-package _work - :load-path "~/Sync/emacs/private/") +(use-package tab-bar + :config + (setopt tab-bar-show t + tab-bar-format + (append tab-bar-format + '(tab-bar-format-align-right + tab-bar-format-global))) + (tab-bar-mode)) diff --git a/lisp/acdw-shell b/lisp/acdw-shell new file mode 100644 index 0000000..e69de29 diff --git a/lisp/acdw-shell.el b/lisp/acdw-shell.el new file mode 100644 index 0000000..7c542aa --- /dev/null +++ b/lisp/acdw-shell.el @@ -0,0 +1,141 @@ +;;; acdw-shell.el ---Shell config -*- lexical-binding: t; -*- + +;;; Code: + +(defvar eshell-buffer-format "*eshell:%s*" + "Format for eshell buffer names.") + +(defun eshell-rename-pwd () + (rename-buffer (format eshell-buffer-format default-directory) t)) + +(defun eshell-last-dir () + (goto-char (point-max)) + (insert "cd -") + (eshell-send-input)) + +(defun eshellp (buffer-or-name) + (with-current-buffer buffer-or-name + (derived-mode-p 'eshell-mode))) + +(defun +eshell (&optional new) + (interactive "P") + (let ((dir default-directory) + (bname (format eshell-buffer-format default-directory)) + (display-comint-buffer-action 'pop-to-buffer)) + (if-let ((buf (and (not new) + (or (get-buffer bname) + (seq-find #'eshellp + (reverse (buffer-list))))))) + (pop-to-buffer buf) + (eshell new)) + (eshell-rename-pwd) + (unless (equal default-directory dir) + (eshell/cd dir) + (eshell-send-input) + (goto-char (point-max))))) + +(defun +eshell-quit (&optional choose) + (interactive "P") + (if choose + (let* ((bufs (mapcar #'buffer-name + (seq-filter #'eshellp + (buffer-list)))) + (buf (get-buffer + (completing-read "Eshell: " + bufs nil t nil nil (car bufs))))) + (quit-window) + (pop-to-buffer buf)) + (quit-window))) + +(defun acdw/eshell-prompt () + "My custom eshell prompt." + (concat (if (= 0 eshell-last-command-status) + "^_^ " + ";_; ") + (abbreviate-file-name (eshell/pwd)) + (if (= (user-uid) 0) " # " " $ "))) + + +;;; Packages + +(use-package eshell + :init + (add-hook 'eshell-post-command-hook #'eshell-rename-pwd) + (setopt eshell-modules-list + '(eshell-alias + eshell-basic + eshell-cmpl + eshell-dirs + eshell-elecslash + eshell-hist + eshell-ls + eshell-prompt + eshell-smart + eshell-extpipe + eshell-glob + eshell-hist + eshell-ls + eshell-pred + eshell-prompt + eshell-script + eshell-term + eshell-unix)) + :commands eshell + :bind (("C-z" . +eshell) + :map eshell-mode-map + ("C-z" . +eshell-quit) + ("C-o" . eshell-last-dir)) + :config + (require 'esh-module) + (require 'em-smart) + (require 'em-tramp) + (setopt eshell-destroy-buffer-when-process-dies t + eshell-error-if-no-glob t + eshell-hist-ignoredups t + eshell-kill-on-exit t + eshell-prefer-lisp-functions t + eshell-prefer-lisp-variables t + eshell-scroll-to-bottom-on-input 'this + eshell-banner-message "" + eshell-hist-ignoredups 'erase + eshell-history-size 512 + eshell-input-filter (lambda (input) + (or (eshell-input-filter-default input) + (eshell-input-filter-initial-space input))) + eshell-prompt-function #'acdw/eshell-prompt) + (add-hook 'eshell-mode-hook + (defun eshell-setup () + (hungry-delete-mode -1) + (setq-local outline-regexp eshell-prompt-regexp + page-delimiter eshell-prompt-regexp + imenu-generic-expression + '(("Prompt" " $ \\(.*\\)" 1)) + truncate-lines t) + (setenv "PAGER" "cat")))) + +(use-package eat + :ensure t + :hook (eshell-load-hook . eat-eshell-mode)) + +(use-package exec-path-from-shell + :when (eq system-type 'gnu/linux) + :ensure t + :config + (add-to-list 'exec-path-from-shell-variables "SSH_AUTH_SOCK") + (add-to-list 'exec-path-from-shell-variables "SSH_AGENT_PID") + (add-to-list 'exec-path-from-shell-variables "GPG_AGENT_INFO") + (add-to-list 'exec-path-from-shell-variables "LANG") + (add-to-list 'exec-path-from-shell-variables "LC_CTYPE") + (add-to-list 'exec-path-from-shell-variables "XDG_CONFIG_HOME") + (add-to-list 'exec-path-from-shell-variables "XDG_CONFIG_DIRS") + (add-to-list 'exec-path-from-shell-variables "XDG_DATA_HOME") + (add-to-list 'exec-path-from-shell-variables "XDG_DATA_DIRS") + (add-to-list 'exec-path-from-shell-variables "XDG_CACHE_HOME") + (exec-path-from-shell-initialize)) + +(use-package eshell-bookmark + :ensure t + :hook (eshell-mode-hook . eshell-bookmark-setup)) + +(provide 'acdw-shell) +;;; acdw-shell.el ends here diff --git a/lisp/acdw-web.el b/lisp/acdw-web.el new file mode 100644 index 0000000..080cd9a --- /dev/null +++ b/lisp/acdw-web.el @@ -0,0 +1,28 @@ +;;; acdw.web.el --- Web browsing and such -*- lexical-binding: t; -*- + +;;; Code: + +(defcustom +browse-url-other-safe-browser-functions nil + "Other safe browser functions." + :type '(repeat function)) + +(defun +browse-url-browser-function-safe-p (f) + "Return t if F is a safe browser function." + (memq f (append +browse-url-other-safe-browser-functions + (mapcar (lambda (i) + (plist-get (cdr i) :value)) + (seq-filter (lambda (i) + (eq (car i) 'function-item)) + (cdr (get 'browse-url-browser-function + 'custom-type))))))) + + +;;; Packages + +(use-package browse-url + :config + (put 'browse-url-browser-function 'safe-local-variable + '+browse-url-browser-function-safe-p)) + +(provide 'acdw-web) +;;; acdw-web.el ends here -- cgit 1.4.1-21-gabe81