Exercism stuff. Bunch of enhancements to vterm and some to dired

This commit is contained in:
Joseph Ferano 2021-11-27 08:56:02 +07:00
parent ea7f456334
commit 598d1696a6
6 changed files with 160 additions and 37 deletions

View File

@ -0,0 +1,54 @@
# Configure
complete -f -c exercism -n "__fish_use_subcommand" -a "configure" -d "Writes config values to a JSON file."
complete -f -c exercism -n "__fish_seen_subcommand_from configure" -s t -l token -d "Set token"
complete -f -c exercism -n "__fish_seen_subcommand_from configure" -s w -l workspace -d "Set workspace"
complete -f -c exercism -n "__fish_seen_subcommand_from configure" -s a -l api -d "set API base url"
complete -f -c exercism -n "__fish_seen_subcommand_from configure" -s s -l show -d "show settings"
# Download
complete -f -c exercism -n "__fish_use_subcommand" -a "download" -d "Downloads and saves a specified submission into the local system"
complete -f -c exercism -n "__fish_seen_subcommand_from download" -s e -l exercise -d "the exercise slug"
complete -f -c exercism -n "__fish_seen_subcommand_from download" -s h -l help -d "help for download"
complete -f -c exercism -n "__fish_seen_subcommand_from download" -s T -l team -d "the team slug"
complete -f -c exercism -n "__fish_seen_subcommand_from download" -s t -l track -d "the track ID"
complete -f -c exercism -n "__fish_seen_subcommand_from download" -s u -l uuid -d "the solution UUID"
# Help
complete -f -c exercism -n "__fish_use_subcommand" -a "help" -d "Shows a list of commands or help for one command"
complete -f -c exercism -n "__fish_seen_subcommand_from help" -a "configure download help open submit troubleshoot upgrade version workspace"
# Open
complete -f -c exercism -n "__fish_use_subcommand" -a "open" -d "Opens a browser to exercism.io for the specified submission."
complete -f -c exercism -n "__fish_seen_subcommand_from open" -s h -l help -d "help for open"
# Submit
complete -f -c exercism -n "__fish_use_subcommand" -a "submit" -d "Submits a new iteration to a problem on exercism.io."
complete -f -c exercism -n "__fish_seen_subcommand_from submit" -s h -l help -d "help for submit"
# Troubleshoot
complete -f -c exercism -n "__fish_use_subcommand" -a "troubleshoot" -d "Outputs useful debug information."
complete -f -c exercism -n "__fish_seen_subcommand_from troubleshoot" -s f -l full-api-key -d "display full API key (censored by default)"
complete -f -c exercism -n "__fish_seen_subcommand_from troubleshoot" -s h -l help -d "help for troubleshoot"
# Upgrade
complete -f -c exercism -n "__fish_use_subcommand" -a "upgrade" -d "Upgrades to the latest available version."
complete -f -c exercism -n "__fish_seen_subcommand_from help" -s h -l help -d "help for help"
# Version
complete -f -c exercism -n "__fish_use_subcommand" -a "version" -d "Outputs version information."
complete -f -c exercism -n "__fish_seen_subcommand_from version" -s l -l latest -d "check latest available version"
complete -f -c exercism -n "__fish_seen_subcommand_from version" -s h -l help -d "help for version"
# Workspace
complete -f -c exercism -n "__fish_use_subcommand" -a "workspace" -d "Outputs the root directory for Exercism exercises."
complete -f -c exercism -n "__fish_seen_subcommand_from workspace" -s h -l help -d "help for workspace"
# Options
complete -f -c exercism -s h -l help -d "show help"
complete -f -c exercism -l timeout -a "10" -d "10 seconds"
complete -f -c exercism -l timeout -a "30" -d "30 seconds"
complete -f -c exercism -l timeout -a "60" -d "1 minute"
complete -f -c exercism -l timeout -a "300" -d "5 minutes"
complete -f -c exercism -l timeout -a "600" -d "10 minutes"
complete -f -c exercism -l timeout -a "" -d "override default HTTP timeout"
complete -f -c exercism -s v -l verbose -d "turn on verbose logging"

View File

@ -17,8 +17,23 @@ if [ (uname -r | sed -n 's/.*\( *Microsoft *\).*/\1/ip') ]
alias xdg-open wsl-open alias xdg-open wsl-open
end end
set -gx forgit_reset_head grf function vterm_printf;
set -gx forgit_diff gdi printf "\e]%s\e\\" "$argv"
end
function vterm_prompt_end;
vterm_printf '51;A'(whoami)'@'(hostname)':'(pwd)
end
functions --copy fish_prompt vterm_old_fish_prompt
function fish_prompt --description 'Write out the prompt; do not replace this. Instead, put this at end of your file.'
# Remove the trailing newline from the original prompt. This is done
# using the string builtin from fish, but to make sure any escape codes
# are correctly interpreted, use %b for printf.
printf "%b" (string join "\n" (vterm_old_fish_prompt))
vterm_prompt_end
end
abbr -a -g gs "git status --untracked-files" abbr -a -g gs "git status --untracked-files"
abbr -a -g gl "git lop -10" abbr -a -g gl "git lop -10"

View File

@ -0,0 +1,3 @@
function exer --wraps='exercism --token=4d706f28-1697-432c-beec-565a707b51da' --description 'alias exer exercism --token=4d706f28-1697-432c-beec-565a707b51da'
exercism --token=4d706f28-1697-432c-beec-565a707b51da $argv;
end

View File

@ -0,0 +1,3 @@
function exercism --description 'alias exercism exercism --token=4d706f28-1697-432c-beec-565a707b51da'
command exercism --token=4d706f28-1697-432c-beec-565a707b51da $argv;
end

View File

@ -0,0 +1,6 @@
function fish_title
hostname
echo ":"
set -g fish_prompt_pwd_dir_length 0
echo -n (prompt_pwd)
end

View File

@ -19,6 +19,10 @@
(define-key key-translation-map (kbd "ESC") (kbd "C-g")) (define-key key-translation-map (kbd "ESC") (kbd "C-g"))
(auto-fill-mode) (auto-fill-mode)
(setq fill-column 80) (setq fill-column 80)
(put 'narrow-to-region 'disabled nil)
(require 'server)
(if (not (server-running-p)) (server-start))
;; Visuals ;; Visuals
(scroll-bar-mode -1) (scroll-bar-mode -1)
@ -36,7 +40,6 @@
(add-hook mode (lambda () (display-line-numbers-mode 0)))) (add-hook mode (lambda () (display-line-numbers-mode 0))))
(make-variable-buffer-local 'global-hl-line-mode) (make-variable-buffer-local 'global-hl-line-mode)
(add-hook 'vterm-mode-hook (lambda () (setq global-hl-line-mode nil)))
(setq scroll-margin 0 (setq scroll-margin 0
scroll-conservatively 100000 scroll-conservatively 100000
@ -48,8 +51,10 @@
(set-face-attribute 'default nil :font "FiraCode Nerd Font" :height 120) (set-face-attribute 'default nil :font "FiraCode Nerd Font" :height 120)
;; Text Settings ;; Text Settings
(setq tab-width 4) (setq-default c-basic-offset 4) ;; This is annoying
(setq-default indent-tabs-mode nil) (setq-default indent-tabs-mode nil)
(setq-default tab-width 4)
(setq indent-line-function 'insert-tab)
(set-default 'truncate-lines t) (set-default 'truncate-lines t)
(set-default 'truncate-partial-width-windows nil) (set-default 'truncate-partial-width-windows nil)
@ -119,7 +124,7 @@ all of the evil keybindings in buffers like magit, without compromises."
'(flycheck-color-mode-line-face-to-color 'mode-line-buffer-id) '(flycheck-color-mode-line-face-to-color 'mode-line-buffer-id)
'(frame-background-mode 'dark) '(frame-background-mode 'dark)
'(package-selected-packages '(package-selected-packages
'(magit ranger multi-vterm evil-collection smartparens vterm all-the-icons-dired all-the-icons org-bullets sudoku select-themes fsharp-mode eglot-fsharp fish-mode find-file-in-project helpful ahk-mode rainbow-delimiters csharp-mode doom-themes marginalia eglot selectrum-prescient prescient selectrum avy evil-commentary evil-embrace evil-snipe evil-surround undo-tree which-key dashboard)) '(mini-frame magit ranger multi-vterm evil-collection smartparens vterm all-the-icons-dired all-the-icons org-bullets sudoku select-themes fsharp-mode eglot-fsharp fish-mode find-file-in-project helpful ahk-mode rainbow-delimiters csharp-mode doom-themes marginalia eglot selectrum-prescient prescient selectrum avy evil-commentary evil-embrace evil-snipe evil-surround undo-tree which-key dashboard))
'(window-divider-mode nil)) '(window-divider-mode nil))
(custom-set-faces (custom-set-faces
;; custom-set-faces was added by Custom. ;; custom-set-faces was added by Custom.
@ -161,16 +166,31 @@ all of the evil keybindings in buffers like magit, without compromises."
"In Dired, visit this file or directory in another window." "In Dired, visit this file or directory in another window."
(interactive) (interactive)
(find-file-other-window (dired-get-file-for-visit))) (find-file-other-window (dired-get-file-for-visit)))
(defun joe/dired-open-file ()
"In dired, open the file named on this line."
(interactive)
(let* ((file (dired-get-filename nil t)))
(call-process "xdg-open" nil 0 nil file)))
(defun joe/bookmark-set-and-save ()
"In dired, open the file named on this line."
(interactive)
(bookmark-set)
(bookmark-save))
(add-hook 'dired-mode-hook (add-hook 'dired-mode-hook
(lambda () (lambda ()
;; (evil-define-key 'normal dired-mode-map (kbd "j") 'peep-dired-next-file) (rename-buffer (concat "Dired - " dired-directory))
;; (evil-define-key 'normal dired-mode-map (kbd "k") 'peep-dired-prev-file) (all-the-icons-dired-mode)
;; (evil-define-key 'normal dired-mode-map (kbd "-") (evil-define-key 'normal dired-mode-map (kbd "o")
;; (lambda () (interactive) (find-alternate-file ".."))) (lambda () (interactive) (joe/dired-open-file)))
;; (lambda () (interactive) (find-alternate-file ".."))) (evil-define-key 'normal dired-mode-map (kbd "s")
(all-the-icons-dired-mode) (lambda () (interactive) (dired-sort-toggle-or-edit)))
(evil-define-key 'normal dired-mode-map (kbd "<return>") (evil-define-key 'normal dired-mode-map (kbd "<return>")
(lambda () (interactive) (dired-find-alternate-file))))) (lambda () (interactive) (dired-find-alternate-file)))))
(evil-define-key 'normal 'global (kbd "-") 'dired-jump) (evil-define-key 'normal 'global (kbd "-") 'dired-jump)
;; (evil-define-key 'normal 'global (kbd "-") 'ranger) ;; (evil-define-key 'normal 'global (kbd "-") 'ranger)
@ -189,42 +209,55 @@ all of the evil keybindings in buffers like magit, without compromises."
"<leader>g" '("Git") "<leader>g" '("Git")
"<leader>t" '("Tabs") "<leader>t" '("Tabs")
"<leader>p" '("Packages") "<leader>p" '("Packages")
"<leader>s" '("Shell (vterm)")
"<leader>h" '("Help")) "<leader>h" '("Help"))
(evil-set-leader 'normal (kbd "SPC")) (evil-set-leader 'normal (kbd "SPC"))
;; To disable a keybinding just bind it to nil
(evil-define-key 'normal 'global (kbd "<leader>w") 'save-buffer) (evil-define-key 'normal 'global (kbd "<leader>w") 'save-buffer)
(evil-define-key 'normal 'global (kbd "<leader>q") 'kill-buffer-and-window) (evil-define-key 'normal 'global (kbd "<leader>q") 'kill-buffer-and-window)
(evil-define-key 'normal 'global (kbd "<leader>h") 'help-command) (evil-define-key 'normal 'global (kbd "<leader>h") 'help-command)
(evil-define-key 'normal 'global (kbd "<leader>k") 'kill-this-buffer)
(evil-define-key 'normal 'global (kbd "<leader>hf") 'helpful-callable) (evil-define-key 'normal 'global (kbd "<leader>hf") 'helpful-callable)
(evil-define-key 'normal 'global (kbd "<leader>hv") 'helpful-variable) (evil-define-key 'normal 'global (kbd "<leader>hv") 'helpful-variable)
(evil-define-key 'normal 'global (kbd "<leader>hk") 'helpful-key) (evil-define-key 'normal 'global (kbd "<leader>hk") 'helpful-key)
(evil-define-key 'normal 'global (kbd "<leader>ho") 'helpful-symbol) (evil-define-key 'normal 'global (kbd "<leader>ho") 'helpful-symbol)
(evil-define-key 'normal 'global (kbd "<leader>hg") 'helpful-at-point) (evil-define-key 'normal 'global (kbd "<leader>hg") 'helpful-at-point)
(evil-define-key 'normal 'global (kbd "<leader>ff") 'bookmark-jump) (evil-define-key 'normal 'global (kbd "<leader>fb") 'bookmark-jump)
(evil-define-key 'normal 'global (kbd "<leader>fr") 'joe/recentf-open-files)
(evil-define-key 'normal 'global (kbd "<leader>ff") 'ffip)
(evil-define-key 'normal 'global (kbd "<leader>fi") 'joe/edit-init) (evil-define-key 'normal 'global (kbd "<leader>fi") 'joe/edit-init)
(evil-define-key 'normal 'global (kbd "<leader>bl") 'mode-line-other-buffer) (evil-define-key 'normal 'global (kbd "<leader>bl") 'mode-line-other-buffer)
(evil-define-key 'normal 'global (kbd "<leader>bb") 'switch-to-buffer) (evil-define-key 'normal 'global (kbd "<leader>bb") 'switch-to-buffer)
(evil-define-key 'normal 'global (kbd "<leader>k") 'kill-this-buffer)
(evil-define-key 'normal 'global (kbd "<leader>bi") 'ibuffer) (evil-define-key 'normal 'global (kbd "<leader>bi") 'ibuffer)
(evil-define-key 'normal 'global (kbd "<leader>bm") 'joe/toggle-buffer-mode) (evil-define-key 'normal 'global (kbd "<leader>bm") 'joe/toggle-buffer-mode)
(evil-define-key 'normal 'global (kbd "<leader>br") 'joe/revert-buffer-no-confirm)
(evil-define-key 'normal 'global (kbd "<leader>gg") 'magit-status) (evil-define-key 'normal 'global (kbd "<leader>gg") 'magit-status)
(evil-define-key 'normal 'global (kbd "<leader>gr") 'joe/revert-buffer-no-confirm )
(evil-define-key 'normal 'global (kbd "<leader>pi") 'package-install) (evil-define-key 'normal 'global (kbd "<leader>pi") 'package-install)
(evil-define-key 'normal 'global (kbd "<leader>pd") 'package-delete) (evil-define-key 'normal 'global (kbd "<leader>pd") 'package-delete)
(evil-define-key 'normal 'global (kbd "<leader>pf") 'package-refresh-contents) (evil-define-key 'normal 'global (kbd "<leader>pf") 'package-refresh-contents)
(evil-define-key 'normal 'global (kbd "<leader>pl") 'package-list-packages) (evil-define-key 'normal 'global (kbd "<leader>pl") 'package-list-packages)
(evil-define-key 'normal 'global (kbd "<leader>pr") 'package-reinstall) (evil-define-key 'normal 'global (kbd "<leader>pr") 'package-reinstall)
(evil-define-key 'normal 'global (kbd "<leader>ss") 'multi-vterm)
(evil-define-key 'normal 'global (kbd "<leader>sp") 'multi-vterm-prev)
(evil-define-key 'normal 'global (kbd "<leader>sn") 'multi-vterm-next)
(evil-define-key 'normal 'global (kbd "<leader>sP") 'multi-vterm-project)
(evil-define-key 'normal 'global (kbd "<leader>st") 'multi-vterm-dedicated-toggle)
(evil-define-key 'normal 'global (kbd "<leader>sf") 'multi-vterm-dedicated-select)
(evil-define-key 'normal 'global (kbd "<leader>Ba") 'joe/bookmark-set-and-save)
(evil-define-key 'normal 'global (kbd "<leader>Bd") 'bookmark-delete)
(evil-define-key 'normal 'global (kbd "C-h") 'evil-window-left) (evil-define-key 'normal 'global (kbd "C-h") 'evil-window-left)
(evil-define-key 'normal 'global (kbd "C-j") 'evil-window-down) (evil-define-key 'normal 'global (kbd "C-j") 'evil-window-down)
(evil-define-key 'normal 'global (kbd "C-k") 'evil-window-up) (evil-define-key 'normal 'global (kbd "C-k") 'evil-window-up)
(evil-define-key 'normal 'global (kbd "C-l") 'evil-window-right) (evil-define-key 'normal 'global (kbd "C-l") 'evil-window-right)
;; (evil-define-key 'normal 'global (kbd "M-h") 'tab-line-switch-to-prev-tab)
;; (evil-define-key 'normal 'global (kbd "M-l") 'tab-line-switch-to-next-tab)
(evil-define-key 'normal 'global (kbd "M-h") 'tab-previous) (evil-define-key 'normal 'global (kbd "M-h") 'tab-previous)
(evil-define-key 'normal 'global (kbd "M-l") 'tab-next) (evil-define-key 'normal 'global (kbd "M-l") 'tab-next)
(evil-define-key 'normal 'global (kbd "<leader>tn") 'tab-new) (evil-define-key 'normal 'global (kbd "<leader>tn") 'tab-new)
(evil-define-key 'normal 'global (kbd "<leader>tc") 'tab-close) (evil-define-key 'normal 'global (kbd "<leader>tc") 'tab-close)
;; (evil-define-key 'normal 'global (kbd "M-h") 'tab-line-switch-to-prev-tab)
;; (evil-define-key 'normal 'global (kbd "M-l") 'tab-line-switch-to-next-tab)
;; TODO figure out how to create these kinds of aliases ;; TODO figure out how to create these kinds of aliases
;; (evil-define-key 'normal 'global (kbd "<leader>gg") 'magit-status) ;; (evil-define-key 'normal 'global (kbd "<leader>gg") 'magit-status)
@ -315,33 +348,42 @@ all of the evil keybindings in buffers like magit, without compromises."
(let ((files (mapcar 'abbreviate-file-name recentf-list))) (let ((files (mapcar 'abbreviate-file-name recentf-list)))
(find-file (completing-read "Find recent file: " files nil t)))) (find-file (completing-read "Find recent file: " files nil t))))
(evil-define-key 'normal 'global (kbd "<leader>fr") 'joe/recentf-open-files)
(require 'smartparens) (require 'smartparens)
(smartparens-global-mode +1) (smartparens-global-mode +1)
(show-paren-mode +1) (show-paren-mode +1)
(require 'vterm)
(setq vterm-shell "/bin/fish")
(setq vterm-timer-delay 0.01)
(setq vterm-buffer-name-string "VTerm - %s")
(setq vterm-max-scrollback 100000)
(add-hook 'vterm-mode-hook
(lambda () (setq global-hl-line-mode nil))
(evil-define-key 'normal vterm-mode-map (kbd "(") 'vterm-previous-prompt)
(evil-define-key 'normal vterm-mode-map (kbd ")") 'vterm-next-prompt))
(require 'find-file-in-project)
(setq ffip-use-rust-fd 't)
;;
;; Mini-frame doesn't seem to be working on Wayland,
;; a window just pops up over emacs, it's annoying
;;
;; (require 'mini-frame) ;; (require 'mini-frame)
;; (setq mini-frame-show-parameters ;; (setq mini-frame-show-parameters
;; '((top . 0.3) (width . 0.7) ;; '((top . 0.3) (width . 0.7)
;; (left . 0.5) (left-fringe . 10) (right-fringe . 10) )) ;; (left . 0.5) (left-fringe . 10) (right-fringe . 10) ))
;; (setq mini-frame-color-shift-step 25) ;; (setq mini-frame-color-shift-step 40)
;; (setq mini-frame-internal-border-color "dark") ;; (setq mini-frame-internal-border-color "dark")
;; (mini-frame-mode) ;; (mini-frame-mode)
;; (setq x-gtk-resize-child-frames 'resize-mode)
(require 'vterm)
(setq vterm-shell "/bin/fish")
(setq vterm-timer-delay 0.01)
(require 'eglot) ;; ;; Workaround for the initial candidates of mini frame not being shown
(require 'eglot-fsharp) ;; ;; https://github.com/raxod502/selectrum/issues/169
;; (require 'ranger)
;; (setq ranger-show-literal nil)
;; Workaround for the initial candidates of mini frame not being shown
;; https://github.com/raxod502/selectrum/issues/169
;; (define-advice fit-frame-to-buffer (:around (f &rest args) dont-skip-ws-for-mini-frame) ;; (define-advice fit-frame-to-buffer (:around (f &rest args) dont-skip-ws-for-mini-frame)
;; (cl-letf* ((orig (symbol-function #'window-text-pixel-size)) ;; (cl-letf* ((orig (symbol-function #'window-text-pixel-size))
;; ((symbol-function #'window-text-pixel-size) ;; ((symbol-function #'window-text-pixel-size)
@ -356,11 +398,11 @@ all of the evil keybindings in buffers like magit, without compromises."
;; args))))) ;; args)))))
;; (apply f args))) ;; (apply f args)))
(require 'find-file-in-project) ;; (require 'eglot)
(setq ffip-use-rust-fd 't) ;; (require 'eglot-fsharp)
(require 'server) ;; (require 'ranger)
(if (not (server-running-p)) (server-start)) ;; (setq ranger-show-literal nil)
;; TODO: Packages to check out ;; TODO: Packages to check out
;; expand-region ;; expand-region