Compare commits
No commits in common. "2150285aea1df36c8f351334347c9a2f5f21a3b1" and "b9559eabe09657fdb80bc50b38f48c7df072cf2d" have entirely different histories.
2150285aea
...
b9559eabe0
16 changed files with 376 additions and 359 deletions
393
elpaca.lock
393
elpaca.lock
File diff suppressed because it is too large
Load diff
|
|
@ -73,11 +73,9 @@
|
|||
(setopt create-lockfiles nil)
|
||||
|
||||
;; Enable line numbers and show cursors position
|
||||
(dolist (mode '(prog-mode-hook
|
||||
text-mode-hook
|
||||
conf-mode-hook))
|
||||
(add-hook mode 'display-line-numbers-mode))
|
||||
|
||||
(add-hook 'prog-mode-hook 'display-line-numbers-mode)
|
||||
(add-hook 'text-mode-hook 'display-line-numbers-mode)
|
||||
(add-hook 'conf-mode-hook 'display-line-numbers-mode)
|
||||
;; (global-display-line-numbers-mode t)
|
||||
(column-number-mode t)
|
||||
|
||||
|
|
|
|||
|
|
@ -8,8 +8,8 @@
|
|||
;; These packages are foundational dependency and possibly can be blocking.
|
||||
;;; Code:
|
||||
|
||||
;; Nice menus
|
||||
(use-package transient :ensure t)
|
||||
(use-package company :ensure t)
|
||||
|
||||
;; Finally, wait for installation of these four packages.
|
||||
(if (fboundp 'elpaca-wait)
|
||||
|
|
|
|||
97
lisp/icejam-company-yasnippet.el
Normal file
97
lisp/icejam-company-yasnippet.el
Normal file
|
|
@ -0,0 +1,97 @@
|
|||
;;; icejam-company-yasnippet.el -- summary -*- lexical-binding: t; -*-
|
||||
;;; Commentary:
|
||||
;;; Company completion framework configuration
|
||||
;;; Code:
|
||||
(require 'icejam-blocking)
|
||||
|
||||
(use-package yasnippet :ensure t :defer t
|
||||
:hook ((elpaca-after-init . yas-global-mode))
|
||||
:config
|
||||
(unbind-key "C-c & C-n" yas-minor-mode-map)
|
||||
(unbind-key "C-c & C-s" yas-minor-mode-map)
|
||||
(unbind-key "C-c & C-v" yas-minor-mode-map))
|
||||
|
||||
(use-package yasnippet-snippets :ensure t :after (yasnippet))
|
||||
|
||||
(use-package kind-icon
|
||||
:ensure t
|
||||
:after company
|
||||
:config
|
||||
(let* ((kind-func (lambda (candidate) (company-call-backend 'kind candidate)))
|
||||
(formatter (kind-icon-margin-formatter `((company-kind . ,kind-func)))))
|
||||
(defun icejam-company-kind-icon-margin (candidate _selected)
|
||||
(funcall formatter candidate))
|
||||
(setopt company-format-margin-function #'icejam-company-kind-icon-margin)))
|
||||
|
||||
(with-eval-after-load 'company
|
||||
(global-company-mode t)
|
||||
|
||||
;; Hacks for orderless
|
||||
(defun just-one-face (fn &rest args)
|
||||
(let ((orderless-match-faces [completions-common-part]))
|
||||
(apply fn args)))
|
||||
|
||||
(advice-add 'company-capf--candidates :around #'just-one-face)
|
||||
|
||||
(defun company-completion-styles (capf-fn &rest args)
|
||||
(let ((completion-styles '(partial-completion basic)))
|
||||
(apply capf-fn args)))
|
||||
|
||||
(advice-add 'company-capf :around #'company-completion-styles)
|
||||
|
||||
(setq-default
|
||||
company-minimum-prefix-length 3 ;; minimum prefix character number for auto complete.
|
||||
company-idle-delay 0.1
|
||||
company-require-match nil
|
||||
company-echo-delay 0 ;;;; company-show-numbers t
|
||||
company-tooltip-align-annotations t ;; align annotations to the right tooltip border.
|
||||
company-tooltip-flip-when-above t
|
||||
company-tooltip-limit 10 ;; tooltip candidates max limit.
|
||||
company-tooltip-minimum 2 ;; minimum candidates limit.
|
||||
company-tooltip-minimum-width 10 ;; The minimum width of the tooltip's inner area.
|
||||
;; This doesn't include the margins and the scroll bar.
|
||||
company-tooltip-margin 2 ;; width of margin columns to show around the tooltip
|
||||
company-tooltip-offset-display 'lines ;; 'lines - how to show tooltip unshown candidates number.
|
||||
company-show-numbers nil ;; t: show quick-access numbers for the first ten candidates.
|
||||
company-selection-wrap-around t ;; loop over candidates
|
||||
company-dabbrev-other-buffers t ;; Only offer dabbrev from the same major mode
|
||||
company-dabbrev-downcase nil ;; Preserve case of candidates
|
||||
company-format-margin-function nil
|
||||
;; company-async-wait 0.03
|
||||
;; company-async-timeout 2
|
||||
)
|
||||
|
||||
;; Absolute defaults for company mode
|
||||
(setopt company-backends
|
||||
'((company-files ; files & directory
|
||||
company-keywords ; keywords
|
||||
company-capf)
|
||||
(company-dabbrev company-abbrev)
|
||||
))
|
||||
|
||||
;; Use standard emacs next and previous bindings for navigating company
|
||||
;; suggestions
|
||||
(define-key company-active-map (kbd "C-p") 'company-select-previous-or-abort)
|
||||
(define-key company-active-map (kbd "C-n") 'company-select-next-or-abort)
|
||||
|
||||
(defun icejam-insert-space-and-complete ()
|
||||
"Insert space before trying to complete a section."
|
||||
(interactive)
|
||||
(save-excursion
|
||||
(insert " "))
|
||||
(company-indent-or-complete-common))
|
||||
|
||||
;; Only use RETURN for completion in company
|
||||
(unbind-key "TAB" company-active-map)
|
||||
|
||||
;; Yasnippet configuration
|
||||
(define-key prog-mode-map (kbd "C-c y") 'company-yasnippet)
|
||||
(define-key prog-mode-map (kbd "<f13>") 'icejam-insert-space-and-complete)
|
||||
(define-key prog-mode-map (kbd "TAB") 'company-indent-or-complete-common)
|
||||
|
||||
(define-key text-mode-map (kbd "C-c y") 'company-yasnippet)
|
||||
(define-key text-mode-map (kbd "<f13>") 'icejam-insert-space-and-complete)
|
||||
(define-key text-mode-map (kbd "TAB") 'company-indent-or-complete-common))
|
||||
|
||||
(provide 'icejam-company-yasnippet)
|
||||
;;; icejam-company-yasnippet.el ends here
|
||||
|
|
@ -1,64 +0,0 @@
|
|||
;;; icejam-complete-at-point.el -- summary -*- lexical-binding: t; -*-
|
||||
;;; Commentary:
|
||||
;;; Company completion framework configuration
|
||||
;;; Code:
|
||||
(require 'icejam-blocking)
|
||||
|
||||
(use-package yasnippet :ensure t :defer t
|
||||
:hook ((elpaca-after-init . yas-global-mode))
|
||||
:config
|
||||
(unbind-key "C-c & C-n" yas-minor-mode-map)
|
||||
(unbind-key "C-c & C-s" yas-minor-mode-map)
|
||||
(unbind-key "C-c & C-v" yas-minor-mode-map))
|
||||
|
||||
(use-package yasnippet-snippets :ensure t :after (yasnippet))
|
||||
|
||||
|
||||
;; Corfu is the main engine for displaying suggestions.
|
||||
(use-package corfu :ensure t :defer t
|
||||
:hook ((elpaca-after-init . global-corfu-mode)
|
||||
(global-corfu-mode . corfu-popupinfo-mode))
|
||||
:config
|
||||
;; Go up to go the the last item on the list
|
||||
(setopt corfu-cycle t)
|
||||
|
||||
;; Show 20 corfu
|
||||
(setopt corfu-count 20)
|
||||
|
||||
;; Max width of the corfu frame
|
||||
(setopt corfu-max-width 120)
|
||||
|
||||
(setopt corfu-right-margin-width 0.5)
|
||||
(setopt corfu-left-margin-width 0.5)
|
||||
(setopt corfu-bar-width 0.5)
|
||||
(setopt corfu-auto-delay 0.2)
|
||||
(setopt corfu-popupinfo-delay '(0.4 . 0.2))
|
||||
(setopt corfu-auto t)
|
||||
(setopt corfu-quit-no-match 'separator))
|
||||
|
||||
;; Allow corfu to work in terminal
|
||||
(use-package corfu-terminal :ensure t :defer t
|
||||
:if (not (display-graphic-p))
|
||||
:hook ((elpaca-after-init . corfu-terminal-mode)))
|
||||
|
||||
;; These are actual completions
|
||||
(use-package cape :ensure t :after corfu
|
||||
:config
|
||||
;; Set default completion values:
|
||||
(set-default 'completion-at-point-functions
|
||||
(list (cape-capf-super #'lsp-completion-at-point
|
||||
#'yasnippet-capf)
|
||||
#'cape-dabbrev
|
||||
#'cape-file)))
|
||||
|
||||
(use-package yasnippet-capf :ensure t :after corfu
|
||||
:config (setopt yasnippet-capf-lookup-by 'name))
|
||||
|
||||
(use-package nerd-icons-corfu :ensure t
|
||||
:after corfu
|
||||
:config
|
||||
(declare-function nerd-icons-corfu-formatter 'nerd-icons-corfu)
|
||||
(add-to-list 'corfu-margin-formatters #'nerd-icons-corfu-formatter))
|
||||
|
||||
(provide 'icejam-complete-at-point)
|
||||
;;; icejam-complete-at-point.el ends here
|
||||
|
|
@ -85,59 +85,60 @@
|
|||
(defgroup :icejam nil "My customisation group.")
|
||||
|
||||
;; General configuration files.
|
||||
(use-package icejam-keys-mode :ensure nil)
|
||||
(use-package icejam-blocking :ensure nil)
|
||||
(use-package icejam-base :ensure nil)
|
||||
(use-package icejam-sys-specific :ensure nil)
|
||||
(use-package icejam-tree-sitter :ensure nil)
|
||||
(use-package icejam-completing-read :ensure nil)
|
||||
(use-package icejam-avy :ensure nil)
|
||||
(use-package icejam-transient :ensure nil)
|
||||
(use-package icejam-prog-mode :ensure nil)
|
||||
(use-package icejam-complete-at-point :ensure nil)
|
||||
(use-package icejam-copilot :ensure nil)
|
||||
(use-package icejam-flycheck :ensure nil)
|
||||
(use-package icejam-ispell :ensure nil)
|
||||
(use-package icejam-deft :ensure nil)
|
||||
(use-package icejam-lsp :ensure nil)
|
||||
(use-package icejam-dashboard :ensure nil)
|
||||
(use-package icejam-magit :ensure nil)
|
||||
(use-package icejam-vundo :ensure nil)
|
||||
(use-package icejam-speed-type :ensure nil)
|
||||
(require 'icejam-keys-mode)
|
||||
(require 'icejam-blocking)
|
||||
(require 'icejam-base)
|
||||
(require 'icejam-sys-specific)
|
||||
(require 'icejam-tree-sitter)
|
||||
(require 'icejam-completing-read)
|
||||
(require 'icejam-avy)
|
||||
(require 'icejam-transient)
|
||||
(require 'icejam-prog-mode)
|
||||
(require 'icejam-company-yasnippet)
|
||||
(require 'icejam-copilot)
|
||||
(require 'icejam-flycheck)
|
||||
(require 'icejam-ispell)
|
||||
(require 'icejam-deft)
|
||||
(require 'icejam-lsp)
|
||||
(require 'icejam-dashboard)
|
||||
(require 'icejam-magit)
|
||||
(require 'icejam-vundo)
|
||||
(require 'icejam-speed-type)
|
||||
|
||||
;; Themes
|
||||
(use-package icejam-themes :ensure nil)
|
||||
(use-package icejam-fonts :ensure nil)
|
||||
(require 'icejam-themes)
|
||||
(require 'icejam-fonts)
|
||||
|
||||
;; Actual supported languages and file syntax.
|
||||
(use-package icejam-lang-clang :ensure nil)
|
||||
(use-package icejam-lang-clojure :ensure nil)
|
||||
(use-package icejam-lang-dart :ensure nil)
|
||||
(use-package icejam-lang-dhall :ensure nil)
|
||||
(use-package icejam-lang-elisp :ensure nil)
|
||||
(use-package icejam-lang-elixir :ensure nil)
|
||||
(use-package icejam-lang-erlang :ensure nil)
|
||||
(use-package icejam-lang-fsharp :ensure nil)
|
||||
(use-package icejam-lang-gleam :ensure nil)
|
||||
(use-package icejam-lang-golang :ensure nil)
|
||||
(use-package icejam-lang-haskell :ensure nil)
|
||||
(use-package icejam-lang-javascript :ensure nil)
|
||||
(use-package icejam-lang-kotlin :ensure nil)
|
||||
(use-package icejam-lang-lean :ensure nil)
|
||||
(use-package icejam-lang-markdown :ensure nil)
|
||||
(use-package icejam-lang-ocaml :ensure nil)
|
||||
(use-package icejam-lang-other :ensure nil)
|
||||
(use-package icejam-lang-php :ensure nil)
|
||||
(use-package icejam-lang-purescript :ensure nil)
|
||||
(use-package icejam-lang-python :ensure nil)
|
||||
(use-package icejam-lang-ruby :ensure nil)
|
||||
(use-package icejam-lang-rust :ensure nil)
|
||||
(use-package icejam-lang-sh :ensure nil)
|
||||
(use-package icejam-lang-web :ensure nil)
|
||||
(use-package icejam-lang-ziglang :ensure nil)
|
||||
(require 'icejam-lang-clang)
|
||||
(require 'icejam-lang-clojure)
|
||||
;; (require 'icejam-lang-common-lisp)
|
||||
(require 'icejam-lang-dart)
|
||||
(require 'icejam-lang-dhall)
|
||||
(require 'icejam-lang-elisp)
|
||||
(require 'icejam-lang-elixir)
|
||||
(require 'icejam-lang-erlang)
|
||||
(require 'icejam-lang-fsharp)
|
||||
(require 'icejam-lang-gleam)
|
||||
(require 'icejam-lang-golang)
|
||||
(require 'icejam-lang-haskell)
|
||||
(require 'icejam-lang-javascript)
|
||||
(require 'icejam-lang-kotlin)
|
||||
(require 'icejam-lang-lean)
|
||||
(require 'icejam-lang-markdown)
|
||||
(require 'icejam-lang-ocaml)
|
||||
(require 'icejam-lang-other)
|
||||
(require 'icejam-lang-php)
|
||||
(require 'icejam-lang-purescript)
|
||||
(require 'icejam-lang-python)
|
||||
(require 'icejam-lang-ruby)
|
||||
(require 'icejam-lang-rust)
|
||||
(require 'icejam-lang-sh)
|
||||
(require 'icejam-lang-web)
|
||||
(require 'icejam-lang-ziglang)
|
||||
|
||||
;; Diminish modeline litter
|
||||
(use-package icejam-diminish :ensure nil)
|
||||
(require 'icejam-diminish)
|
||||
|
||||
;; Restore GC to normal, but still high
|
||||
(setopt gc-cons-threshold 204800000)
|
||||
|
|
|
|||
|
|
@ -17,6 +17,7 @@
|
|||
(flycheck flycheck-mode)
|
||||
(rainbow-mode rainbow-mode)
|
||||
(undo-tree undo-tree-mode)
|
||||
(company company-mode)
|
||||
(which-key which-key-mode)
|
||||
(eldoc eldoc-mode)
|
||||
(yasnippet yas-minor-mode)
|
||||
|
|
|
|||
|
|
@ -26,7 +26,6 @@
|
|||
;; (defconst icejam-font "Iosevka Term" "Default font.")
|
||||
|
||||
(defconst icejam-font-family "Iosevka Comfy Motion" "Default font.")
|
||||
(defconst icejam-variable-font-family "Lexica Ultralegible" "Variable pitch font.")
|
||||
(defconst icejam-markdown-font-family "Iosevka Term" "Font used to render code blocks in markdown.")
|
||||
|
||||
;; Require dash functions to be included:
|
||||
|
|
@ -42,11 +41,6 @@ in `icejam-set-font-to-screen`.")
|
|||
"Current font, defaults to the one loaded in the beginning."
|
||||
:type 'string
|
||||
:group 'icejam)
|
||||
(defcustom icejam-mut-variable-font-family
|
||||
icejam-font-family
|
||||
"Current variable-pitch font. Defaults to `icejam-variable-font-family`."
|
||||
:type 'string
|
||||
:group 'icejam)
|
||||
(defcustom icejam-mut-markdown-font-family
|
||||
icejam-markdown-font-family
|
||||
"Current markdown font family, defaults to the one loaded in the beginning."
|
||||
|
|
@ -77,14 +71,14 @@ in `icejam-set-font-to-screen`.")
|
|||
"Set font to FAMILY and its HEIGHT to X.
|
||||
|
||||
Not all faces will be set to this value. Some of them look better with being
|
||||
slightly smaller than the default face, by 1 point. Those are: `tooltip'.
|
||||
slightly smaller than the default face, by 1 point. Those are: `tooltip',
|
||||
`company-tooltip', `company-tooltip-annotation', `company-tooltip-mouse'.
|
||||
|
||||
Modeline faces (`mode-line' and `mode-line-inactive') look better if they are
|
||||
two points smaller."
|
||||
(interactive "sNew font: \nnEnter height for %s: ")
|
||||
(setopt icejam-mut-font-family family)
|
||||
(setopt icejam-mut-font-height height)
|
||||
(setopt icejam-mut-variable-font-family icejam-variable-font-family)
|
||||
|
||||
;; Set default font.
|
||||
(set-face-attribute 'default nil
|
||||
|
|
@ -92,14 +86,11 @@ two points smaller."
|
|||
:height (-> height
|
||||
(* 10)))
|
||||
|
||||
;; Set variable-pitch font
|
||||
(set-face-attribute 'variable-pitch nil
|
||||
:family icejam-mut-variable-font-family
|
||||
:height (-> height
|
||||
(* 10)))
|
||||
|
||||
;; Some font faces look better when they are 1 point smaller.
|
||||
(dolist (face '(tooltip))
|
||||
(dolist (face '(tooltip
|
||||
company-tooltip
|
||||
company-tooltip-annotation
|
||||
company-tooltip-mouse))
|
||||
(set-face-attribute face nil :height (-> height
|
||||
(- 1)
|
||||
(* 10))))
|
||||
|
|
|
|||
|
|
@ -61,7 +61,7 @@
|
|||
|
||||
(if (memq window-system '(x mac ns))
|
||||
(enable-theme 'icejam-base16-zenburn)
|
||||
(enable-theme 'icejam-base16-zenburn)))
|
||||
(enable-theme 'icejam-base16-zenburn)))
|
||||
|
||||
(provide 'icejam-themes)
|
||||
;;; icejam-themes.el ends here
|
||||
|
|
|
|||
|
|
@ -44,6 +44,8 @@
|
|||
("r" "Replace" vr/replace)
|
||||
("i" "Indent" indent-region)]
|
||||
["Complete"
|
||||
("y" "Snippet" company-yasnippet)
|
||||
("m" "Any (Company)" company-complete)
|
||||
("g" "Ask GPT" gptel-menu)
|
||||
("a" "Aider" aider-transient-menu)
|
||||
("e" "Refactor (Elysium)" elysium-query)]
|
||||
|
|
|
|||
|
|
@ -19,7 +19,10 @@
|
|||
|
||||
(if (boundp 'c-default-style)
|
||||
(setq-local c-default-style "bsd")
|
||||
(defvar c-default-style "bsd")))
|
||||
(defvar c-default-style "bsd"))
|
||||
|
||||
(add-to-list (make-local-variable 'company-backends)
|
||||
'(company-etags company-yasnippet)))
|
||||
|
||||
(add-hook 'c-mode-hook 'icejam-lang-activate-clang-mode)
|
||||
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@
|
|||
;;; Code:
|
||||
|
||||
(require 'icejam-prog-mode)
|
||||
(require 'icejam-complete-at-point)
|
||||
(require 'icejam-company-yasnippet)
|
||||
|
||||
(use-package slime :ensure t)
|
||||
(use-package slime-company :ensure t
|
||||
|
|
|
|||
|
|
@ -1,14 +1,20 @@
|
|||
;;; languages/elisp -- summary -*- lexical-binding: t; -*-
|
||||
;;; Commentary:
|
||||
;;; Code:
|
||||
|
||||
(require 'icejam-prog-mode)
|
||||
(require 'icejam-transient)
|
||||
|
||||
;; Dash is a package that creates terse and more natural to me functions to
|
||||
;; do basic things in Elisp.
|
||||
(use-package dash :ensure t :defer t)
|
||||
(use-package lispy :ensure t :defer t)
|
||||
(use-package aggressive-indent :ensure t :defer t)
|
||||
|
||||
(declare-function aggressive-indent-mode "aggressive-indent")
|
||||
(declare-function column-enforce-n "column-enforce-mode" (number))
|
||||
(add-to-list 'auto-mode-alist '("/Eask\\'" . emacs-lisp-mode))
|
||||
|
||||
(use-package lispy :ensure t :defer t)
|
||||
|
||||
(transient-define-prefix icejam-elisp-lang-menu ()
|
||||
"Elisp Buffer Commands."
|
||||
[""
|
||||
|
|
@ -23,19 +29,19 @@
|
|||
(add-to-list
|
||||
'icejam-language-transient-alist '(emacs-lisp-mode . icejam-elisp-lang-menu))
|
||||
|
||||
(declare-function lispy-mode "lispy")
|
||||
(defun icejam-activate-emacs-lisp-mode ()
|
||||
"Goodies for editing Emacs files."
|
||||
|
||||
(icejam-set-indent 2) ;; Default indentation of 2 characters
|
||||
(column-enforce-n 80) ;; Use 80 char limit.
|
||||
(lispy-mode t) ;; Modal editing for Lisp
|
||||
(column-enforce-n 80)
|
||||
|
||||
(setq-local completion-at-point-functions
|
||||
(list (cape-capf-super #'elisp-completion-at-point
|
||||
#'yasnippet-capf)
|
||||
#'cape-dabbrev
|
||||
#'cape-file
|
||||
#'cape-elisp-symbol)))
|
||||
(dash-fontify-mode t) ;; Fontify dash variables
|
||||
(lispy-mode t) ;; Pseudomodal editing for lisp code
|
||||
(aggressive-indent-mode) ;; Indent lisp automatically
|
||||
|
||||
;; Company list override
|
||||
(add-to-list (make-local-variable 'company-backends)
|
||||
'(company-yasnippet company-capf)))
|
||||
|
||||
(add-hook 'emacs-lisp-mode-hook 'icejam-activate-emacs-lisp-mode)
|
||||
|
||||
|
|
|
|||
|
|
@ -43,11 +43,7 @@
|
|||
|
||||
(setq-local lsp-eldoc-enable-hover nil)
|
||||
(setq-local lsp-completion-enable-additional-text-edit nil)
|
||||
(setq-local completion-at-point-functions
|
||||
(list (cape-capf-super #'lsp-completion-at-point
|
||||
#'yasnippet-capf)
|
||||
#'cape-dabbrev
|
||||
#'cape-file)))
|
||||
(setq-local company-minimum-prefix-length 3))
|
||||
|
||||
(add-hook 'heex-ts-mode-hook 'icejam-activate-elixir-ts-mode)
|
||||
(add-hook 'elixir-ts-mode-hook 'icejam-activate-elixir-ts-mode)
|
||||
|
|
|
|||
|
|
@ -25,7 +25,8 @@
|
|||
(purescript-indentation-mode t)
|
||||
|
||||
;; Company list override
|
||||
)
|
||||
(add-to-list (make-local-variable 'company-backends)
|
||||
'(company-capf company-yasnippet)))
|
||||
|
||||
(add-hook 'purescript-mode-hook 'icejam-activate-purescript-mode)
|
||||
|
||||
|
|
|
|||
|
|
@ -22,7 +22,11 @@
|
|||
(column-enforce-n 99)
|
||||
|
||||
;; Run LSP
|
||||
(lsp-deferred))
|
||||
(lsp-deferred)
|
||||
|
||||
;; Company list override
|
||||
(add-to-list (make-local-variable 'company-backends)
|
||||
'(company-capf company-yasnippet)))
|
||||
|
||||
(add-hook 'rust-mode-hook 'icejam-activate-rust-mode)
|
||||
(add-hook 'rust-mode-hook 'flycheck-rust-setup)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue