From 598d1696a6150258a38c07febe0338c7c4a9914c Mon Sep 17 00:00:00 2001 From: Joseph Ferano Date: Sat, 27 Nov 2021 08:56:02 +0700 Subject: [PATCH] Exercism stuff. Bunch of enhancements to vterm and some to dired --- .config/fish/completions/exercism.fish | 54 ++++++++++++ .config/fish/config.fish | 19 ++++- .config/fish/functions/exer.fish | 3 + .config/fish/functions/exercism.fish | 3 + .config/fish/functions/fish_title.fish | 6 ++ .emacs.d/init.el | 112 +++++++++++++++++-------- 6 files changed, 160 insertions(+), 37 deletions(-) create mode 100644 .config/fish/completions/exercism.fish create mode 100644 .config/fish/functions/exer.fish create mode 100644 .config/fish/functions/exercism.fish create mode 100644 .config/fish/functions/fish_title.fish diff --git a/.config/fish/completions/exercism.fish b/.config/fish/completions/exercism.fish new file mode 100644 index 0000000..dc20fdc --- /dev/null +++ b/.config/fish/completions/exercism.fish @@ -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" diff --git a/.config/fish/config.fish b/.config/fish/config.fish index 078899f..e757ba8 100644 --- a/.config/fish/config.fish +++ b/.config/fish/config.fish @@ -17,8 +17,23 @@ if [ (uname -r | sed -n 's/.*\( *Microsoft *\).*/\1/ip') ] alias xdg-open wsl-open end -set -gx forgit_reset_head grf -set -gx forgit_diff gdi +function vterm_printf; + 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 gl "git lop -10" diff --git a/.config/fish/functions/exer.fish b/.config/fish/functions/exer.fish new file mode 100644 index 0000000..6a0610f --- /dev/null +++ b/.config/fish/functions/exer.fish @@ -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 diff --git a/.config/fish/functions/exercism.fish b/.config/fish/functions/exercism.fish new file mode 100644 index 0000000..b666a4c --- /dev/null +++ b/.config/fish/functions/exercism.fish @@ -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 diff --git a/.config/fish/functions/fish_title.fish b/.config/fish/functions/fish_title.fish new file mode 100644 index 0000000..5defedb --- /dev/null +++ b/.config/fish/functions/fish_title.fish @@ -0,0 +1,6 @@ +function fish_title + hostname + echo ":" + set -g fish_prompt_pwd_dir_length 0 + echo -n (prompt_pwd) +end diff --git a/.emacs.d/init.el b/.emacs.d/init.el index 1684ab7..f307170 100644 --- a/.emacs.d/init.el +++ b/.emacs.d/init.el @@ -19,6 +19,10 @@ (define-key key-translation-map (kbd "ESC") (kbd "C-g")) (auto-fill-mode) (setq fill-column 80) +(put 'narrow-to-region 'disabled nil) + +(require 'server) +(if (not (server-running-p)) (server-start)) ;; Visuals (scroll-bar-mode -1) @@ -36,7 +40,6 @@ (add-hook mode (lambda () (display-line-numbers-mode 0)))) (make-variable-buffer-local 'global-hl-line-mode) -(add-hook 'vterm-mode-hook (lambda () (setq global-hl-line-mode nil))) (setq scroll-margin 0 scroll-conservatively 100000 @@ -48,8 +51,10 @@ (set-face-attribute 'default nil :font "FiraCode Nerd Font" :height 120) ;; Text Settings -(setq tab-width 4) +(setq-default c-basic-offset 4) ;; This is annoying (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-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) '(frame-background-mode 'dark) '(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)) (custom-set-faces ;; 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." (interactive) (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 - (lambda () - ;; (evil-define-key 'normal dired-mode-map (kbd "j") 'peep-dired-next-file) - ;; (evil-define-key 'normal dired-mode-map (kbd "k") 'peep-dired-prev-file) - ;; (evil-define-key 'normal dired-mode-map (kbd "-") - ;; (lambda () (interactive) (find-alternate-file ".."))) - ;; (lambda () (interactive) (find-alternate-file ".."))) - (all-the-icons-dired-mode) - (evil-define-key 'normal dired-mode-map (kbd "") - (lambda () (interactive) (dired-find-alternate-file))))) + (lambda () + (rename-buffer (concat "Dired - " dired-directory)) + (all-the-icons-dired-mode) + (evil-define-key 'normal dired-mode-map (kbd "o") + (lambda () (interactive) (joe/dired-open-file))) + (evil-define-key 'normal dired-mode-map (kbd "s") + (lambda () (interactive) (dired-sort-toggle-or-edit))) + (evil-define-key 'normal dired-mode-map (kbd "") + (lambda () (interactive) (dired-find-alternate-file))))) + (evil-define-key 'normal 'global (kbd "-") 'dired-jump) ;; (evil-define-key 'normal 'global (kbd "-") 'ranger) @@ -189,42 +209,55 @@ all of the evil keybindings in buffers like magit, without compromises." "g" '("Git") "t" '("Tabs") "p" '("Packages") + "s" '("Shell (vterm)") "h" '("Help")) (evil-set-leader 'normal (kbd "SPC")) + +;; To disable a keybinding just bind it to nil (evil-define-key 'normal 'global (kbd "w") 'save-buffer) (evil-define-key 'normal 'global (kbd "q") 'kill-buffer-and-window) (evil-define-key 'normal 'global (kbd "h") 'help-command) +(evil-define-key 'normal 'global (kbd "k") 'kill-this-buffer) (evil-define-key 'normal 'global (kbd "hf") 'helpful-callable) (evil-define-key 'normal 'global (kbd "hv") 'helpful-variable) (evil-define-key 'normal 'global (kbd "hk") 'helpful-key) (evil-define-key 'normal 'global (kbd "ho") 'helpful-symbol) (evil-define-key 'normal 'global (kbd "hg") 'helpful-at-point) -(evil-define-key 'normal 'global (kbd "ff") 'bookmark-jump) +(evil-define-key 'normal 'global (kbd "fb") 'bookmark-jump) +(evil-define-key 'normal 'global (kbd "fr") 'joe/recentf-open-files) +(evil-define-key 'normal 'global (kbd "ff") 'ffip) (evil-define-key 'normal 'global (kbd "fi") 'joe/edit-init) (evil-define-key 'normal 'global (kbd "bl") 'mode-line-other-buffer) (evil-define-key 'normal 'global (kbd "bb") 'switch-to-buffer) -(evil-define-key 'normal 'global (kbd "k") 'kill-this-buffer) (evil-define-key 'normal 'global (kbd "bi") 'ibuffer) (evil-define-key 'normal 'global (kbd "bm") 'joe/toggle-buffer-mode) +(evil-define-key 'normal 'global (kbd "br") 'joe/revert-buffer-no-confirm) (evil-define-key 'normal 'global (kbd "gg") 'magit-status) -(evil-define-key 'normal 'global (kbd "gr") 'joe/revert-buffer-no-confirm ) (evil-define-key 'normal 'global (kbd "pi") 'package-install) (evil-define-key 'normal 'global (kbd "pd") 'package-delete) (evil-define-key 'normal 'global (kbd "pf") 'package-refresh-contents) (evil-define-key 'normal 'global (kbd "pl") 'package-list-packages) (evil-define-key 'normal 'global (kbd "pr") 'package-reinstall) +(evil-define-key 'normal 'global (kbd "ss") 'multi-vterm) +(evil-define-key 'normal 'global (kbd "sp") 'multi-vterm-prev) +(evil-define-key 'normal 'global (kbd "sn") 'multi-vterm-next) +(evil-define-key 'normal 'global (kbd "sP") 'multi-vterm-project) +(evil-define-key 'normal 'global (kbd "st") 'multi-vterm-dedicated-toggle) +(evil-define-key 'normal 'global (kbd "sf") 'multi-vterm-dedicated-select) +(evil-define-key 'normal 'global (kbd "Ba") 'joe/bookmark-set-and-save) +(evil-define-key 'normal 'global (kbd "Bd") 'bookmark-delete) (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-k") 'evil-window-up) (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-l") 'tab-next) (evil-define-key 'normal 'global (kbd "tn") 'tab-new) (evil-define-key 'normal 'global (kbd "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 ;; (evil-define-key 'normal 'global (kbd "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))) (find-file (completing-read "Find recent file: " files nil t)))) -(evil-define-key 'normal 'global (kbd "fr") 'joe/recentf-open-files) - (require 'smartparens) (smartparens-global-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) ;; (setq mini-frame-show-parameters ;; '((top . 0.3) (width . 0.7) ;; (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") ;; (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) -(require 'eglot-fsharp) - -;; (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 +;; ;; 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) ;; (cl-letf* ((orig (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))))) ;; (apply f args))) -(require 'find-file-in-project) -(setq ffip-use-rust-fd 't) +;; (require 'eglot) +;; (require 'eglot-fsharp) -(require 'server) -(if (not (server-running-p)) (server-start)) +;; (require 'ranger) +;; (setq ranger-show-literal nil) ;; TODO: Packages to check out ;; expand-region