# HG changeset patch # User Oleksandr Gavenko # Date 1609540384 -7200 # Node ID 06937ff1ec5f53f076faf1828b7e31aa31341725 # Parent 3685e2321a9bfdcb8ce05a8677ec62445d3c7ff6 Moved my elisp modes to dedicated directory to not mixt with init.el. diff -r 3685e2321a9b -r 06937ff1ec5f Makefile --- a/Makefile Sat Jan 02 00:27:54 2021 +0200 +++ b/Makefile Sat Jan 02 00:33:04 2021 +0200 @@ -44,10 +44,10 @@ # Installation directories and files. emacsdir := $(HOME)/.emacs.d -mylispdir := $(emacsdir)/my +mylispdir := $(emacsdir)/mylisp # Compatibility version. -COMPAT_VER := 1 +COMPAT_VER := 2 COMPAT_FILE := $(emacsdir)/.emacs-ver ################################################################ @@ -64,7 +64,7 @@ ################################################################ # Proj dirs/files. -EL_FILES := $(filter-out %.dev.el,$(wildcard *.el)) +EL_FILES := $(wildcard mylisp/*.el) ELC_FILES := $(EL_FILES:.el=.elc) RST_FILES := $(wildcard *.rst) @@ -181,7 +181,7 @@ .PHONY: check-byte-compile check-byte-compile: \ -$(EMACS) -f package-initialize --eval '(push "." load-path)' --batch -f batch-byte-compile $(filter-out init.el,$(EL_FILES)) || : +$(EMACS) -f package-initialize --eval '(push "mylisp" load-path)' --batch -f batch-byte-compile $(EL_FILES) || : rm -f $(ELC_FILES) ################################################################ diff -r 3685e2321a9b -r 06937ff1ec5f ag.el --- a/ag.el Sat Jan 02 00:27:54 2021 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,144 +0,0 @@ -;;; ag.el --- Ag frontend - -;;; Commentary: -;; - -(defgroup my-ag nil - "My own ag search front-end." - :prefix "my-ag" - :group 'tools - :group 'processes) - -(defun my-ag-goto () - (interactive) - (save-excursion - (let ( lineno end ) - (forward-line 1) - (backward-char 1) - (setq end (point)) - (forward-line 0) - (if (not (search-forward-regexp "^\\([1-9][0-9]*\\)[:-]" end t)) - (message "Not at line number...") - (setq lineno (string-to-number (match-string 1))) - (if (search-backward-regexp "^$" nil t) - (forward-char) - (goto-char (point-min))) - (search-forward-regexp "^.*") - (find-file-other-window (match-string 0)) - (goto-char (point-min)) - (forward-line (1- lineno)))))) - -(defun my-ag-kill-process () - (interactive) - (let ( (proc (get-buffer-process (current-buffer))) ) - (if proc - (interrupt-process proc) - (error "The %s process is not running" (downcase mode-name))))) - -(defvar my-ag-mode-map (make-sparse-keymap)) - -(define-key my-ag-mode-map (kbd "RET") 'my-ag-goto) -(define-key my-ag-mode-map (kbd "C-c C-k") 'my-ag-kill-process) - -(defface my-ag/lineno-face - '((t :inherit warning)) - "Face for line number." - :group 'my-ag) -(defface my-ag/path-face - '((t :inherit success)) - "Face for line number." - :group 'my-ag) - -(defvar my-ag/keywords - '(("^[1-9][0-9]\\{0,5\\}[-:]" . (0 'my-ag/lineno-face)) - ("^[^:]\\{6\\}.*" . (0 'my-ag/path-face)))) - -(define-derived-mode my-ag-mode fundamental-mode "Ag" - "Major mode for Ag parsing." - (setq font-lock-defaults '(my-ag/keywords t nil nil)) ; (font-lock-multiline . t) - (use-local-map my-ag-mode-map)) - -(defvar my-ag/buffer-name "*ag*") -(defvar my-ag/buffer nil) - -(defun my-ag/filter (proc str) - (when (buffer-live-p (process-buffer proc)) - (with-current-buffer (process-buffer proc) - (save-excursion - (goto-char (process-mark proc)) - (insert str) - (set-marker (process-mark proc) (point))) - ))) - -(defvar my-ag/regex-history nil) - -(defun my-ag/setup-buffer (dir) - (setq my-ag/buffer (get-buffer-create my-ag/buffer-name)) - (with-current-buffer my-ag/buffer - (setq default-directory dir) - (erase-buffer) - (my-ag-mode)) - (display-buffer my-ag/buffer)) - -(defun my-ag/run (regex &optional args) - (let ((default-directory (buffer-local-value 'default-directory my-ag/buffer)) - (cmd (list "ag" "--group" "--nocolor" "--hidden"))) - (when args - (nconc cmd (split-string args))) - (nconc cmd (list "--" regex)) - (make-process - :name "ag" - :buffer my-ag/buffer - :filter 'my-ag/filter - :command cmd))) - -(defun my-ag/project-root () - (condition-case err - (let ( backend ) - (setq backend (vc-responsible-backend default-directory)) - (if backend - (vc-call-backend backend 'root default-directory) - default-directory)) - (error default-directory))) - -(defun my-ag/read-regex () - (let* ( (def (when my-ag/regex-history (car my-ag/regex-history))) - (part (when def (if (< (length def) 20) - def - (concat (substring def 0 20) "...")))) ) - (read-string - (if part (format "Regex [%s]: " part) "Regex: ") - "" 'my-ag/regex-history def t))) - -(defvar my-ag/extra-history nil) - -(defun my-ag/read-extra () - (let* ( (def (when my-ag/extra-history (car my-ag/extra-history))) - (part (when def (if (< (length def) 20) - def - (concat (substring def 0 20) "...")))) ) - (read-string - (if part (format "Extra args [%s]: " part) "Extra args: ") - "" 'my-ag/extra-history def t))) - -;;;###autoload -(defun my-ag (regex &optional args) - "Search in 'ag' recursively from VCS root directory and fall to -current directory if VCS root is not defined." - (interactive (if (equal current-prefix-arg '(16)) - (list (my-ag/read-regex) (my-ag/read-extra)) - (list (my-ag/read-regex)))) - (my-ag/setup-buffer (if current-prefix-arg default-directory (my-ag/project-root))) - (my-ag/run regex args)) - -;;;###autoload -(defun my-ag-default-directory (regex) - "Search in 'ag' recursively from current directory." - (interactive (list (my-ag/read-regex))) - (my-ag/setup-buffer default-directory) - (my-ag/run regex)) - - -(provide 'ag) - -;;; ag.el ends here diff -r 3685e2321a9b -r 06937ff1ec5f autobm.el --- a/autobm.el Sat Jan 02 00:27:54 2021 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,84 +0,0 @@ -;;; autobm.el --- suggest bookmark name from local context -*- lexical-binding: t -*- - -(require 'cl-lib) -(require 'bookmark) -(require 'which-func) -(require 'semantic/find) - -(defvar autobm-mode-handlers - '((emacs-lisp-mode . (autobm-try-semantic)) - (semantic-decoration-mode . (autobm-try-semantic)) - (rst-mode . (autobm-try-word)) - (t . (autobm-try-which-func autobm-try-thingatpt))) - "Alist of handlers by mode. Key is a mojor or minor mode name, or `t' as fallback. -Value is a no-argument function or a list of such functions, -which returns string or `nil'.") - -(defun autobm-try-which-func () - (which-function)) - -(defvar autobm-try-thingatpt-things - '(symbol url email)) - -(defun autobm-try-thingatpt () - (cl-some #'thing-at-point autobm-try-thingatpt-things)) - -(defun autobm-try-word () - (thing-at-point 'word)) - -(defun autobm-try-line () - (let ( (line (thing-at-point 'line)) ) - (substring line 0 (min (1- (length line)) 30)))) - -(defun autobm-get-active-handlers () - (let ( h handlers (modes (list major-mode)) ) - (dolist (m minor-mode-list) - (when (and (boundp m) (symbol-value m)) - (push m modes))) - (push t modes) - (dolist (m modes) - (setq h (assoc m autobm-mode-handlers)) - (when h - (setq h (cdr h)) - (cond - ((symbolp h) - (push h handlers)) - ((listp h) - (setq handlers (append h handlers))) - (t (error "autobm-mode-handlers isn't a list or a symbol"))))) - handlers)) - -(defvar autobm-try-semantic-type-alist - '((variable . "var") - (function . "fn") - (type . "type"))) - -(defun autobm-try-semantic () - (let ( (tag (semantic-current-tag)) prefix ) - (when tag - (setq prefix (assoc (cadr tag) autobm-try-semantic-type-alist)) - (when prefix - (format "%s: %s" (cdr prefix) (car tag)))))) - -(defun autobm-suggest () - "Suggest bookmark name depending on buffer mode and local -context using `autobm-try-semantic-type-alist'. First checked major -mode then active minor modes." - (let ((result nil)) - (catch 'exit - (dolist (h (autobm-get-active-handlers)) - (when (setq result (funcall h)) - (throw 'exit result)))))) - -;;;###autoload -(defun autobm (&optional no-overwrite) - (interactive "P") - (let ( (name (autobm-suggest)) ) - (when name - (setq name (read-string "Set bookmark: " name bookmark-minibuffer-read-name-map name))) - (bookmark-set name no-overwrite))) - -;; (global-set-key (kbd "C-x r m") 'autobm) - -(provide 'autobm) - diff -r 3685e2321a9b -r 06937ff1ec5f debian-doc.el --- a/debian-doc.el Sat Jan 02 00:27:54 2021 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,77 +0,0 @@ -;;; debian-doc.el --- Debian doc-base integration with Emacs. - -;;; Commentary: -;; - -;;; Code: - -(defvar debian-doc-dir "/usr/share/doc-base") -(defvar debian-doc-buffer-name "*debian-doc*") -(defvar debian-doc-buffer nil) - -(defvar debian-doc-mode-map (make-sparse-keymap)) - -(defconst debian-doc-font-lock-keywords - '(("^[^ ][^:\n]*: " . font-lock-function-name-face) - ("^\\(Index\\|Files\\): \\(/.*\\)" 2 font-lock-doc-face) - ("^Format: \\(.*\\)" 1 font-lock-type-face) - ("^Document: \\(.*\\)" 1 font-lock-keyword-face))) - -(defun debian-doc-mode () - "Debian-Doc mode for viewing doc-base information." - (kill-all-local-variables) - (setq major-mode 'debian-doc-mode - mode-name "Debian-Doc") - (use-local-map debian-doc-mode-map) - (setq font-lock-defaults '((debian-doc-font-lock-keywords) t nil nil nil))) - -(defvar debian-doc-completion-list nil) - -;;;###autoload -(defun debian-doc (&optional prefix) - "Build Debian-Doc buffer. - -With PREFIX force to rebuild buffer from doc-base files." - (interactive "P") - (when prefix - (kill-buffer debian-doc-buffer)) - (if (buffer-live-p debian-doc-buffer) - (switch-to-buffer debian-doc-buffer) - (setq debian-doc-completion-list nil) - (setq debian-doc-buffer (get-buffer-create debian-doc-buffer-name)) - (switch-to-buffer debian-doc-buffer) - (let ( (coding-system-for-read 'utf-8) ) - (mapc (lambda (file) - (when (file-regular-p file) - ;; (with-temp-buffer - ;; (insert-file-contents file)) - (insert "\n-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-\n\n") - (insert-file-contents file) - (goto-char (point-max)))) - (directory-files debian-doc-dir t))) - (read-only-mode 1) - (debian-doc-mode) - (goto-char (point-min)))) - -;;;###autoload -(defun debian-doc-visit () - "Prompt for Debian package which represent docs and visit its entry in Debian-oc buffer." - (interactive) - (let (word start) - (debian-doc) - (unless debian-doc-completion-list - (save-excursion - (goto-char (point-min)) - (while (setq start (search-forward "Document: " nil t)) - (end-of-line) - (push (buffer-substring-no-properties start (point)) debian-doc-completion-list)))) - (when (setq word (completing-read "Package: " debian-doc-completion-list nil t)) - (goto-char (point-min)) - (search-forward (concat "Document: " word) nil t) - (recenter-top-bottom)))) -(define-key debian-doc-mode-map (kbd "RET") 'debian-doc-visit-at-point) - - -(provide 'debian-doc) - -;;; debian-doc.el ends here diff -r 3685e2321a9b -r 06937ff1ec5f log4-hi-mode.el --- a/log4-hi-mode.el Sat Jan 02 00:27:54 2021 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,92 +0,0 @@ -;;; log4-hi-mode.el --- Syntax highlighting logs keywords. - -;;; Commentary: -;; Used for highlighting ERROR/WARN/INFO like keywords and dates in logs. - -;;; Code: - -(defgroup log4-hi nil - "`log4-hi-mode' mode for highlighting logs." - :prefix "log4-hi-" - :group 'text) - -(defface log4-hi-error-face - '((t :inherit error)) - "Face for critical message." - :group 'log4-hi) - -(defface log4-hi-warn-face - '((t :inherit warning)) - "Face for urgent message." - :group 'log4-hi) - -(defface log4-hi-info-face - '((t :inherit success)) - "Face for informational message." - :group 'log4-hi) - -(defface log4-hi-func-face - '((t :inherit font-lock-function-name-face)) - "Face for functions in trace." - :group 'log4-hi) - -(defface log4-hi-time-face - '((t :inherit font-lock-builtin-face :height 0.7)) - "Face for time." - :group 'log4-hi) - -(defface log4-hi-hide-face - '((t :inherit shadow :height 0.7 :family "Arial")) - "Face for extra text for hiding." - :group 'log4-hi) - -(defvar log4-hi-keywords - '(("FATAL\\|ERROR" . 'log4-hi-error-face) - ("WARN\\|SEVERE" . 'log4-hi-warn-face) - ("INFO\\|DEBUG\\|TRACE" . 'log4-hi-info-face) )) - -(defvar log4-hi-func-keywords - '(("^.\\{0,5\\}at [[:alnum:]./]+\\.\\([[:alnum:]$]+\\.[[:alnum:]$<>]+\\)([[:alnum:]]+\\.java:[0-9]+)" 1 'log4-hi-func-face) ) - "Highlight regex for line from Java stack trace.") - -(defvar log4-hi-time-keywords - '(("\\(:?\\(:?[0-9]\\{2\\}?[0-9]\\{2\\}.\\)?[0-9]\\{2\\}.[0-9]\\{2\\}.\\|\\<\\)[0-9]?[0-9]:[0-9][0-9]:[0-9][0-9]\\>\\(:?[.,][0-9]\\{3,6\\}\\)?" . 'log4-hi-time-face)) - "Highlight regex for ISO date.") - -(defvar log4-hi-hide-regex - '(("\\[`.\\{3,100\\}`]" . 'log4-hi-hide-face)) - "Highlight regex for extra text for hiding.") - -(defvar log4-hi-func t - "Mark to use hilighting of function names in stacktraces. Currently only Java supported.") - -(defvar log4-hi-mode-map (make-sparse-keymap) - "Keymap for `log4-hi-mode'.") - -;;;###autoload -(define-minor-mode log4-hi-mode - "Highlight standard elements in log4* like log-files." - nil " log4-hi" log4-hi-mode-map - :global nil - (catch 'exit - (when log4-hi-mode - (font-lock-mode 1) - (font-lock-add-keywords nil log4-hi-keywords) - (font-lock-add-keywords nil log4-hi-time-keywords) - (font-lock-add-keywords nil log4-hi-hide-regex) - (when log4-hi-func (font-lock-add-keywords nil log4-hi-func-keywords)) - (setq prettify-symbols-alist (list (cons "[`" ?$,2'f(B) (cons "`]" ?$,2'g(B))) - (prettify-symbols-mode 1) - (throw 'exit nil)) - (font-lock-remove-keywords nil log4-hi-keywords) - (font-lock-remove-keywords nil log4-hi-time-keywords) - (font-lock-remove-keywords nil log4-hi-func-keywords) - (font-lock-remove-keywords nil log4-hi-hide-regex) - (prettify-symbols-mode -1)) - (font-lock-flush)) - -(provide 'log4-hi-mode) - -(provide 'log4-hi-mode) - -;;; log4-hi-mode.el ends here diff -r 3685e2321a9b -r 06937ff1ec5f maven-central.el --- a/maven-central.el Sat Jan 02 00:27:54 2021 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,168 +0,0 @@ -;;; maven-central.el --- Maven central auxility - -;;; Commentary: -;; - -(require 'json) -(require 'url-handlers) -(require 'maven) - -;;; Code: - -(defvar maven-central/buffer-name "*Maven Central*") - -(defconst maven-central/search-url "http://search.maven.org/solrsearch/select?wt=json&rows=20") - -(defun maven-central/versions-url (groupId artifactId) - (concat maven-central/search-url "&core=gav&q=g:" (url-hexify-string groupId) (url-hexify-string " AND ") "a:" (url-hexify-string artifactId))) -;; (maven-central/versions-url "junit" "junit") - -(defun maven-central/versions-callback (status) - (let ( (buffer (current-buffer)) json ) - (with-temp-buffer - (url-insert buffer) - (goto-char (point-min)) - (setq json (json-read)) - ;; (switch-to-buffer maven-central/buffer-name) - ;; (pp json) - (message "Available versions: %s" (mapconcat (lambda (json) (cdr (assq 'v json))) (cdr (assq 'docs (cdr (assoc 'response json)))) ", ")) - ))) - -(defun maven-central/versions (groupId artifactId) - "Retrieve available versions." - (url-retrieve (maven-central/versions-url groupId artifactId) #'maven-central/versions-callback)) - -(defun maven-central/last-version-url (groupId artifactId) - (concat maven-central/search-url "&q=g:" (url-hexify-string groupId) (url-hexify-string " AND ") "a:" (url-hexify-string artifactId))) -;; (maven-central/versions-url "junit" "junit") - -(defun maven-central/last-version-callback (status) - (let ( (buffer (current-buffer)) json ) - (with-temp-buffer - (url-insert buffer) - (goto-char (point-min)) - (setq json (json-read)) - ;; (switch-to-buffer maven-central/buffer-name) - ;; (pp json) - (message "Latest version: %s" (cdr (assq 'latestVersion (elt (cdr (assq 'docs (cdr (assoc 'response json)))) 0)))) - ))) - -(defun maven-central/last-version (groupId artifactId) - "Retrieve last package version." - (url-retrieve (maven-central/last-version-url groupId artifactId) #'maven-central/last-version-callback)) - -;;;###autoload -(defun maven-central-last-version-from-pom () - (interactive) - (let (dependency groupId artifactId) - (setq dependency (maven/parse-pom-dependency)) - (setq groupId (elt dependency 0)) - (setq artifactId (elt dependency 1)) - (when (and groupId artifactId) - (maven-central/last-version groupId artifactId)) - )) - -;;;###autoload -(defun maven-central-versions-from-pom () - (interactive) - (let (dependency groupId artifactId) - (setq dependency (maven/parse-pom-dependency)) - (setq groupId (elt dependency 0)) - (setq artifactId (elt dependency 1)) - (when (and groupId artifactId) - (maven-central/versions groupId artifactId)) - )) - -(defun ivy/parse-dependency () - (let ( end groupId artifactId ) - (save-excursion - (if (looking-at "[^>]*") - (setq end (point)) - (search-backward "<") - (save-restriction - (narrow-to-region (point) end) - (goto-char (point-min)) - (when (re-search-forward "\\s-org\\s-*=\\s-*['\"]\\([^'\"]+\\)['\"]" nil t) - (setq groupId (match-string 1))) - (goto-char (point-min)) - (when (re-search-forward "\\s-name\\s-*=\\s-*['\"]\\([^'\"]+\\)['\"]" nil t) - (setq artifactId (match-string 1))) - ))) - (list groupId artifactId))) - -;;;###autoload -(defun maven-central-last-version-from-ivy () - (interactive) - (let (dependency groupId artifactId) - (setq dependency (ivy/parse-dependency)) - (setq groupId (elt dependency 0)) - (setq artifactId (elt dependency 1)) - (when (and groupId artifactId) - (maven-central/last-version groupId artifactId)) - )) - -;;;###autoload -(defun maven-central-versions-from-ivy () - (interactive) - (let (dependency groupId artifactId) - (setq dependency (ivy/parse-dependency)) - (setq groupId (elt dependency 0)) - (setq artifactId (elt dependency 1)) - (when (and groupId artifactId) - (maven-central/versions groupId artifactId)) - )) - -(defun maven-central/parse-gradle-dependency () - (let ( groupId artifactId ) - (save-excursion - (goto-char (line-beginning-position)) - (when (re-search-forward "\\([\"']\\)\\([a-zA-Z0-9.-]+\\):\\([a-zA-Z0-9.-]+\\):?[^\"']*\\1" (line-end-position) t) - (setq groupId (match-string 2)) - (setq artifactId (match-string 3)) - (list groupId artifactId))))) - -;;;###autoload -(defun maven-central-last-version-from-gradle () - (interactive) - (let (dependency groupId artifactId) - (setq dependency (maven-central/parse-gradle-dependency)) - (setq groupId (elt dependency 0)) - (setq artifactId (elt dependency 1)) - (when (and groupId artifactId) - (maven-central/last-version groupId artifactId)) - )) - -;;;###autoload -(defun maven-central-versions-from-gradle () - (interactive) - (let (dependency groupId artifactId) - (setq dependency (maven-central/parse-gradle-dependency)) - (setq groupId (elt dependency 0)) - (setq artifactId (elt dependency 1)) - (when (and groupId artifactId) - (maven-central/versions groupId artifactId)) - )) - -(defun maven-central/open (groupId artifactId) - "Open in Maven Central WEB page info for package." - (browse-url (format "https://mvnrepository.com/artifact/%s/%s" groupId artifactId))) - -;;;###autoload -(defun maven-central-open-from-gradle () - (interactive) - (let (dependency groupId artifactId) - (setq dependency (maven-central/parse-gradle-dependency)) - (setq groupId (elt dependency 0)) - (setq artifactId (elt dependency 1)) - (when (and groupId artifactId) - (maven-central/open groupId artifactId)) - )) - -;; (maven-central/last-version "junit" "junit") - -(provide 'maven-central) - -;;; maven-central.el ends here diff -r 3685e2321a9b -r 06937ff1ec5f maven.el --- a/maven.el Sat Jan 02 00:27:54 2021 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,140 +0,0 @@ -;;; maven.el --- Maven build project helpers. - -;;; Commentary: -;; - -;;; Code: - -(defvar maven-command "mvn") - -(defvar maven/help-buffer-name "*Maven Help*") - -(defun maven/parse-pom-dependency-in-region (start end) - (let (groupId artifactId version) - (save-restriction - (narrow-to-region start end) - (goto-char start) - (re-search-forward "\\([^<]*\\)" nil t) - (setq groupId (match-string-no-properties 1)) - (goto-char start) - (re-search-forward "\\([^<]*\\)" nil t) - (setq artifactId (match-string-no-properties 1)) - (goto-char start) - (re-search-forward "\\([^<]*\\)" nil t) - (setq version (match-string-no-properties 1)) - (list groupId artifactId version) - ))) - -(defun maven/parse-pom-dependency (&optional point) - (let (start end pos groupId artifactId version fs-o bs-o fs-c bs-c) - (save-excursion - (if (looking-at "[^>]*<[^!]") - (progn (search-forward "<") (backward-char)) - (search-backward "<")) - (setq point (point)) - (when (re-search-forward "<\\(?:plugin\\|dependency\\)>" nil t) - (setq fs-o (re-search-backward "<" nil t))) - (goto-char point) - (setq bs-o (re-search-backward "<\\(?:plugin\\|dependency\\)>" nil t)) - (goto-char point) - (setq fs-c (re-search-forward "" nil t)) - (goto-char point) - (when (re-search-backward "" nil t) - (setq bs-c (re-search-forward ">" nil t))) - (cond - ((and fs-o (= fs-o point) fs-c) - (maven/parse-pom-dependency-in-region fs-o fs-c)) - ((and bs-o (<= bs-o point) fs-c (<= point fs-c)) - (maven/parse-pom-dependency-in-region bs-o fs-c)) - ((and fs-o fs-c) - (maven/parse-pom-dependency-in-region fs-o fs-c)) - ((and bs-o bs-c) - (maven/parse-pom-dependency-in-region bs-o bs-c)) - (t - (list nil nil nil))) - ))) -;; (pp (maven/parse-pom-dependency)) - -;;;###autoload -(defun maven-help () - "Run help:describe for plugin at point." - (interactive) - (let (dependency groupId artifactId) - (setq dependency (maven/parse-pom-dependency)) - (setq groupId (elt dependency 0)) - (setq artifactId (elt dependency 1)) - (if (not (and groupId artifactId)) - (message "Can't find `groupId' or `artifactId'") - (shell-command - (format "%s help:describe -Ddetail -DgroupId=%s -DartifactId=%s" maven-command groupId artifactId) - (switch-to-buffer maven/help-buffer-name)) ) - )) - -;;;###autoload -(defun maven-effective-pom () - "Run help:effective-pom for plugin at point." - (interactive) - (shell-command - (format "%s help:effective-pom" maven-command) - (switch-to-buffer maven/help-buffer-name)) ) - -;;;###autoload -(defun maven-effective-settings () - "Run help:effective-settings for plugin at point." - (interactive) - (shell-command - (format "%s help:effective-settings" maven-command) - (switch-to-buffer maven/help-buffer-name)) ) - -;;;###autoload -(defun maven-dependency-tree () - "Run dependency:tree for plugin at point." - (interactive) - (shell-command - (format "%s dependency:tree" maven-command) - (switch-to-buffer maven/help-buffer-name)) ) - -(defun maven/project-root () - "Root of project." - (let ( (dir default-directory) (found nil) ) - (while (and (not found) (> (length dir) 5)) - (when (file-exists-p (concat dir "/pom.xml")) - (setq found dir)) - (setq dir (expand-file-name (concat dir "/..")))) - found)) - -(defun maven/file-package () - "Return file package." - (save-excursion - (goto-char (point-min)) - (let (pkg cls) - (re-search-forward "package +\\([[:alnum:]_.]+\\) *;" nil t) - (setq pkg (match-string-no-properties 1)) - (re-search-forward "class\\s +\\([[:alnum:]_]+\\)\\(\\s \\|\n\\|implements [^{]*\\|extents [^{]*\\)*{" nil t) - (setq cls (match-string-no-properties 1)) - (when (and pkg cls) - (concat pkg "." cls))) )) - -;;;###autoload -(defun maven-run-file () - "Run exec:java for current file." - (interactive) - (let* ( (default-directory (concat (maven/project-root) "/")) ) - (if (not default-directory) - (message "Can't find maven project root") - (compilation-start - (format "%s exec:java -Dexec.mainClass=%s" maven-command (maven/file-package)))))) - -;;;###autoload -(defun maven-run-test () - "Run test -Dtest=... for current file." - (interactive) - (let* ( (default-directory (concat (maven/project-root) "/")) ) - (if (not default-directory) - (message "Can't find maven project root") - (compilation-start - (format "%s test -Dtest=%s" maven-command (maven/file-package)))))) - -(provide 'maven) - -;;; maven.el ends here diff -r 3685e2321a9b -r 06937ff1ec5f my-log-mode.el --- a/my-log-mode.el Sat Jan 02 00:27:54 2021 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,72 +0,0 @@ -;;; my-log-mode.el --- major mode for error logs - -;; Copyright (C) 2010 by Oleksandr Gavenko - -;; You can do anything with this file without any warranty. - -;; Author: Oleksandr Gavenko -;; Maintainer: Oleksandr Gavenko -;; Created: 2011-02-09 -;; Version: 0.1 -;; Keywords: logging - -;;; Commentary: -;; -;; Very pure release. - -;;; Code: - -(defun my-log-goto (point) - "Visit file according to error specification at POINT." - (interactive "d") - (let ( start stop line fname fline (fregex "^\\([^:]+\\):\\([[:digit:]]+\\):") ) - (save-excursion - (move-beginning-of-line 1) - (setq start (point)) - (move-end-of-line 1) - (setq stop (point)) - (setq line (filter-buffer-substring start stop)) - (string-match fregex line) - (setq fname (match-string 1 line)) - (when fname - (setq fline (string-to-number (match-string 2 line)))) - ) - (cond - ( (and fname (file-exists-p fname)) - (find-file-other-window fname) - (goto-char (point-min)) - (forward-line (1- fline)) ) - ( t - (if fname - (message "File '%s' is not found (default directory is '%s')." fname default-directory) - (message "No file under current line.") ) ) - ) - )) - -(defvar my-log-mode-map (make-sparse-keymap)) -(define-key my-log-mode-map (kbd "RET") 'my-log-goto) - -(require 'generic-x) - -;;;###autoload -(define-generic-mode - 'my-log-mode - nil - nil - '( - ("^\\([^:]+\\):\\([[:digit:]]+\\):[^ -]+$" (1 font-lock-function-name-face) (2 font-lock-type-face)) - ("^\\([^:]\\{1,10\\}\\):[^ -]+$" (1 font-lock-keyword-face)) - ) - ;; '("\\.log$") - nil - (list - (lambda nil - (use-local-map my-log-mode-map) - (modify-syntax-entry ?' ".") - (modify-syntax-entry ?\" ".") - )) - ) - -;;; my-log-mode.el ends here diff -r 3685e2321a9b -r 06937ff1ec5f mylisp/ag.el --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mylisp/ag.el Sat Jan 02 00:33:04 2021 +0200 @@ -0,0 +1,144 @@ +;;; ag.el --- Ag frontend + +;;; Commentary: +;; + +(defgroup my-ag nil + "My own ag search front-end." + :prefix "my-ag" + :group 'tools + :group 'processes) + +(defun my-ag-goto () + (interactive) + (save-excursion + (let ( lineno end ) + (forward-line 1) + (backward-char 1) + (setq end (point)) + (forward-line 0) + (if (not (search-forward-regexp "^\\([1-9][0-9]*\\)[:-]" end t)) + (message "Not at line number...") + (setq lineno (string-to-number (match-string 1))) + (if (search-backward-regexp "^$" nil t) + (forward-char) + (goto-char (point-min))) + (search-forward-regexp "^.*") + (find-file-other-window (match-string 0)) + (goto-char (point-min)) + (forward-line (1- lineno)))))) + +(defun my-ag-kill-process () + (interactive) + (let ( (proc (get-buffer-process (current-buffer))) ) + (if proc + (interrupt-process proc) + (error "The %s process is not running" (downcase mode-name))))) + +(defvar my-ag-mode-map (make-sparse-keymap)) + +(define-key my-ag-mode-map (kbd "RET") 'my-ag-goto) +(define-key my-ag-mode-map (kbd "C-c C-k") 'my-ag-kill-process) + +(defface my-ag/lineno-face + '((t :inherit warning)) + "Face for line number." + :group 'my-ag) +(defface my-ag/path-face + '((t :inherit success)) + "Face for line number." + :group 'my-ag) + +(defvar my-ag/keywords + '(("^[1-9][0-9]\\{0,5\\}[-:]" . (0 'my-ag/lineno-face)) + ("^[^:]\\{6\\}.*" . (0 'my-ag/path-face)))) + +(define-derived-mode my-ag-mode fundamental-mode "Ag" + "Major mode for Ag parsing." + (setq font-lock-defaults '(my-ag/keywords t nil nil)) ; (font-lock-multiline . t) + (use-local-map my-ag-mode-map)) + +(defvar my-ag/buffer-name "*ag*") +(defvar my-ag/buffer nil) + +(defun my-ag/filter (proc str) + (when (buffer-live-p (process-buffer proc)) + (with-current-buffer (process-buffer proc) + (save-excursion + (goto-char (process-mark proc)) + (insert str) + (set-marker (process-mark proc) (point))) + ))) + +(defvar my-ag/regex-history nil) + +(defun my-ag/setup-buffer (dir) + (setq my-ag/buffer (get-buffer-create my-ag/buffer-name)) + (with-current-buffer my-ag/buffer + (setq default-directory dir) + (erase-buffer) + (my-ag-mode)) + (display-buffer my-ag/buffer)) + +(defun my-ag/run (regex &optional args) + (let ((default-directory (buffer-local-value 'default-directory my-ag/buffer)) + (cmd (list "ag" "--group" "--nocolor" "--hidden"))) + (when args + (nconc cmd (split-string args))) + (nconc cmd (list "--" regex)) + (make-process + :name "ag" + :buffer my-ag/buffer + :filter 'my-ag/filter + :command cmd))) + +(defun my-ag/project-root () + (condition-case err + (let ( backend ) + (setq backend (vc-responsible-backend default-directory)) + (if backend + (vc-call-backend backend 'root default-directory) + default-directory)) + (error default-directory))) + +(defun my-ag/read-regex () + (let* ( (def (when my-ag/regex-history (car my-ag/regex-history))) + (part (when def (if (< (length def) 20) + def + (concat (substring def 0 20) "...")))) ) + (read-string + (if part (format "Regex [%s]: " part) "Regex: ") + "" 'my-ag/regex-history def t))) + +(defvar my-ag/extra-history nil) + +(defun my-ag/read-extra () + (let* ( (def (when my-ag/extra-history (car my-ag/extra-history))) + (part (when def (if (< (length def) 20) + def + (concat (substring def 0 20) "...")))) ) + (read-string + (if part (format "Extra args [%s]: " part) "Extra args: ") + "" 'my-ag/extra-history def t))) + +;;;###autoload +(defun my-ag (regex &optional args) + "Search in 'ag' recursively from VCS root directory and fall to +current directory if VCS root is not defined." + (interactive (if (equal current-prefix-arg '(16)) + (list (my-ag/read-regex) (my-ag/read-extra)) + (list (my-ag/read-regex)))) + (my-ag/setup-buffer (if current-prefix-arg default-directory (my-ag/project-root))) + (my-ag/run regex args)) + +;;;###autoload +(defun my-ag-default-directory (regex) + "Search in 'ag' recursively from current directory." + (interactive (list (my-ag/read-regex))) + (my-ag/setup-buffer default-directory) + (my-ag/run regex)) + + +(provide 'ag) + +;;; ag.el ends here diff -r 3685e2321a9b -r 06937ff1ec5f mylisp/autobm.el --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mylisp/autobm.el Sat Jan 02 00:33:04 2021 +0200 @@ -0,0 +1,84 @@ +;;; autobm.el --- suggest bookmark name from local context -*- lexical-binding: t -*- + +(require 'cl-lib) +(require 'bookmark) +(require 'which-func) +(require 'semantic/find) + +(defvar autobm-mode-handlers + '((emacs-lisp-mode . (autobm-try-semantic)) + (semantic-decoration-mode . (autobm-try-semantic)) + (rst-mode . (autobm-try-word)) + (t . (autobm-try-which-func autobm-try-thingatpt))) + "Alist of handlers by mode. Key is a mojor or minor mode name, or `t' as fallback. +Value is a no-argument function or a list of such functions, +which returns string or `nil'.") + +(defun autobm-try-which-func () + (which-function)) + +(defvar autobm-try-thingatpt-things + '(symbol url email)) + +(defun autobm-try-thingatpt () + (cl-some #'thing-at-point autobm-try-thingatpt-things)) + +(defun autobm-try-word () + (thing-at-point 'word)) + +(defun autobm-try-line () + (let ( (line (thing-at-point 'line)) ) + (substring line 0 (min (1- (length line)) 30)))) + +(defun autobm-get-active-handlers () + (let ( h handlers (modes (list major-mode)) ) + (dolist (m minor-mode-list) + (when (and (boundp m) (symbol-value m)) + (push m modes))) + (push t modes) + (dolist (m modes) + (setq h (assoc m autobm-mode-handlers)) + (when h + (setq h (cdr h)) + (cond + ((symbolp h) + (push h handlers)) + ((listp h) + (setq handlers (append h handlers))) + (t (error "autobm-mode-handlers isn't a list or a symbol"))))) + handlers)) + +(defvar autobm-try-semantic-type-alist + '((variable . "var") + (function . "fn") + (type . "type"))) + +(defun autobm-try-semantic () + (let ( (tag (semantic-current-tag)) prefix ) + (when tag + (setq prefix (assoc (cadr tag) autobm-try-semantic-type-alist)) + (when prefix + (format "%s: %s" (cdr prefix) (car tag)))))) + +(defun autobm-suggest () + "Suggest bookmark name depending on buffer mode and local +context using `autobm-try-semantic-type-alist'. First checked major +mode then active minor modes." + (let ((result nil)) + (catch 'exit + (dolist (h (autobm-get-active-handlers)) + (when (setq result (funcall h)) + (throw 'exit result)))))) + +;;;###autoload +(defun autobm (&optional no-overwrite) + (interactive "P") + (let ( (name (autobm-suggest)) ) + (when name + (setq name (read-string "Set bookmark: " name bookmark-minibuffer-read-name-map name))) + (bookmark-set name no-overwrite))) + +;; (global-set-key (kbd "C-x r m") 'autobm) + +(provide 'autobm) + diff -r 3685e2321a9b -r 06937ff1ec5f mylisp/debian-doc.el --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mylisp/debian-doc.el Sat Jan 02 00:33:04 2021 +0200 @@ -0,0 +1,77 @@ +;;; debian-doc.el --- Debian doc-base integration with Emacs. + +;;; Commentary: +;; + +;;; Code: + +(defvar debian-doc-dir "/usr/share/doc-base") +(defvar debian-doc-buffer-name "*debian-doc*") +(defvar debian-doc-buffer nil) + +(defvar debian-doc-mode-map (make-sparse-keymap)) + +(defconst debian-doc-font-lock-keywords + '(("^[^ ][^:\n]*: " . font-lock-function-name-face) + ("^\\(Index\\|Files\\): \\(/.*\\)" 2 font-lock-doc-face) + ("^Format: \\(.*\\)" 1 font-lock-type-face) + ("^Document: \\(.*\\)" 1 font-lock-keyword-face))) + +(defun debian-doc-mode () + "Debian-Doc mode for viewing doc-base information." + (kill-all-local-variables) + (setq major-mode 'debian-doc-mode + mode-name "Debian-Doc") + (use-local-map debian-doc-mode-map) + (setq font-lock-defaults '((debian-doc-font-lock-keywords) t nil nil nil))) + +(defvar debian-doc-completion-list nil) + +;;;###autoload +(defun debian-doc (&optional prefix) + "Build Debian-Doc buffer. + +With PREFIX force to rebuild buffer from doc-base files." + (interactive "P") + (when prefix + (kill-buffer debian-doc-buffer)) + (if (buffer-live-p debian-doc-buffer) + (switch-to-buffer debian-doc-buffer) + (setq debian-doc-completion-list nil) + (setq debian-doc-buffer (get-buffer-create debian-doc-buffer-name)) + (switch-to-buffer debian-doc-buffer) + (let ( (coding-system-for-read 'utf-8) ) + (mapc (lambda (file) + (when (file-regular-p file) + ;; (with-temp-buffer + ;; (insert-file-contents file)) + (insert "\n-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-\n\n") + (insert-file-contents file) + (goto-char (point-max)))) + (directory-files debian-doc-dir t))) + (read-only-mode 1) + (debian-doc-mode) + (goto-char (point-min)))) + +;;;###autoload +(defun debian-doc-visit () + "Prompt for Debian package which represent docs and visit its entry in Debian-oc buffer." + (interactive) + (let (word start) + (debian-doc) + (unless debian-doc-completion-list + (save-excursion + (goto-char (point-min)) + (while (setq start (search-forward "Document: " nil t)) + (end-of-line) + (push (buffer-substring-no-properties start (point)) debian-doc-completion-list)))) + (when (setq word (completing-read "Package: " debian-doc-completion-list nil t)) + (goto-char (point-min)) + (search-forward (concat "Document: " word) nil t) + (recenter-top-bottom)))) +(define-key debian-doc-mode-map (kbd "RET") 'debian-doc-visit-at-point) + + +(provide 'debian-doc) + +;;; debian-doc.el ends here diff -r 3685e2321a9b -r 06937ff1ec5f mylisp/log4-hi-mode.el --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mylisp/log4-hi-mode.el Sat Jan 02 00:33:04 2021 +0200 @@ -0,0 +1,92 @@ +;;; log4-hi-mode.el --- Syntax highlighting logs keywords. + +;;; Commentary: +;; Used for highlighting ERROR/WARN/INFO like keywords and dates in logs. + +;;; Code: + +(defgroup log4-hi nil + "`log4-hi-mode' mode for highlighting logs." + :prefix "log4-hi-" + :group 'text) + +(defface log4-hi-error-face + '((t :inherit error)) + "Face for critical message." + :group 'log4-hi) + +(defface log4-hi-warn-face + '((t :inherit warning)) + "Face for urgent message." + :group 'log4-hi) + +(defface log4-hi-info-face + '((t :inherit success)) + "Face for informational message." + :group 'log4-hi) + +(defface log4-hi-func-face + '((t :inherit font-lock-function-name-face)) + "Face for functions in trace." + :group 'log4-hi) + +(defface log4-hi-time-face + '((t :inherit font-lock-builtin-face :height 0.7)) + "Face for time." + :group 'log4-hi) + +(defface log4-hi-hide-face + '((t :inherit shadow :height 0.7 :family "Arial")) + "Face for extra text for hiding." + :group 'log4-hi) + +(defvar log4-hi-keywords + '(("FATAL\\|ERROR" . 'log4-hi-error-face) + ("WARN\\|SEVERE" . 'log4-hi-warn-face) + ("INFO\\|DEBUG\\|TRACE" . 'log4-hi-info-face) )) + +(defvar log4-hi-func-keywords + '(("^.\\{0,5\\}at [[:alnum:]./]+\\.\\([[:alnum:]$]+\\.[[:alnum:]$<>]+\\)([[:alnum:]]+\\.java:[0-9]+)" 1 'log4-hi-func-face) ) + "Highlight regex for line from Java stack trace.") + +(defvar log4-hi-time-keywords + '(("\\(:?\\(:?[0-9]\\{2\\}?[0-9]\\{2\\}.\\)?[0-9]\\{2\\}.[0-9]\\{2\\}.\\|\\<\\)[0-9]?[0-9]:[0-9][0-9]:[0-9][0-9]\\>\\(:?[.,][0-9]\\{3,6\\}\\)?" . 'log4-hi-time-face)) + "Highlight regex for ISO date.") + +(defvar log4-hi-hide-regex + '(("\\[`.\\{3,100\\}`]" . 'log4-hi-hide-face)) + "Highlight regex for extra text for hiding.") + +(defvar log4-hi-func t + "Mark to use hilighting of function names in stacktraces. Currently only Java supported.") + +(defvar log4-hi-mode-map (make-sparse-keymap) + "Keymap for `log4-hi-mode'.") + +;;;###autoload +(define-minor-mode log4-hi-mode + "Highlight standard elements in log4* like log-files." + nil " log4-hi" log4-hi-mode-map + :global nil + (catch 'exit + (when log4-hi-mode + (font-lock-mode 1) + (font-lock-add-keywords nil log4-hi-keywords) + (font-lock-add-keywords nil log4-hi-time-keywords) + (font-lock-add-keywords nil log4-hi-hide-regex) + (when log4-hi-func (font-lock-add-keywords nil log4-hi-func-keywords)) + (setq prettify-symbols-alist (list (cons "[`" ?$,2'f(B) (cons "`]" ?$,2'g(B))) + (prettify-symbols-mode 1) + (throw 'exit nil)) + (font-lock-remove-keywords nil log4-hi-keywords) + (font-lock-remove-keywords nil log4-hi-time-keywords) + (font-lock-remove-keywords nil log4-hi-func-keywords) + (font-lock-remove-keywords nil log4-hi-hide-regex) + (prettify-symbols-mode -1)) + (font-lock-flush)) + +(provide 'log4-hi-mode) + +(provide 'log4-hi-mode) + +;;; log4-hi-mode.el ends here diff -r 3685e2321a9b -r 06937ff1ec5f mylisp/maven-central.el --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mylisp/maven-central.el Sat Jan 02 00:33:04 2021 +0200 @@ -0,0 +1,168 @@ +;;; maven-central.el --- Maven central auxility + +;;; Commentary: +;; + +(require 'json) +(require 'url-handlers) +(require 'maven) + +;;; Code: + +(defvar maven-central/buffer-name "*Maven Central*") + +(defconst maven-central/search-url "http://search.maven.org/solrsearch/select?wt=json&rows=20") + +(defun maven-central/versions-url (groupId artifactId) + (concat maven-central/search-url "&core=gav&q=g:" (url-hexify-string groupId) (url-hexify-string " AND ") "a:" (url-hexify-string artifactId))) +;; (maven-central/versions-url "junit" "junit") + +(defun maven-central/versions-callback (status) + (let ( (buffer (current-buffer)) json ) + (with-temp-buffer + (url-insert buffer) + (goto-char (point-min)) + (setq json (json-read)) + ;; (switch-to-buffer maven-central/buffer-name) + ;; (pp json) + (message "Available versions: %s" (mapconcat (lambda (json) (cdr (assq 'v json))) (cdr (assq 'docs (cdr (assoc 'response json)))) ", ")) + ))) + +(defun maven-central/versions (groupId artifactId) + "Retrieve available versions." + (url-retrieve (maven-central/versions-url groupId artifactId) #'maven-central/versions-callback)) + +(defun maven-central/last-version-url (groupId artifactId) + (concat maven-central/search-url "&q=g:" (url-hexify-string groupId) (url-hexify-string " AND ") "a:" (url-hexify-string artifactId))) +;; (maven-central/versions-url "junit" "junit") + +(defun maven-central/last-version-callback (status) + (let ( (buffer (current-buffer)) json ) + (with-temp-buffer + (url-insert buffer) + (goto-char (point-min)) + (setq json (json-read)) + ;; (switch-to-buffer maven-central/buffer-name) + ;; (pp json) + (message "Latest version: %s" (cdr (assq 'latestVersion (elt (cdr (assq 'docs (cdr (assoc 'response json)))) 0)))) + ))) + +(defun maven-central/last-version (groupId artifactId) + "Retrieve last package version." + (url-retrieve (maven-central/last-version-url groupId artifactId) #'maven-central/last-version-callback)) + +;;;###autoload +(defun maven-central-last-version-from-pom () + (interactive) + (let (dependency groupId artifactId) + (setq dependency (maven/parse-pom-dependency)) + (setq groupId (elt dependency 0)) + (setq artifactId (elt dependency 1)) + (when (and groupId artifactId) + (maven-central/last-version groupId artifactId)) + )) + +;;;###autoload +(defun maven-central-versions-from-pom () + (interactive) + (let (dependency groupId artifactId) + (setq dependency (maven/parse-pom-dependency)) + (setq groupId (elt dependency 0)) + (setq artifactId (elt dependency 1)) + (when (and groupId artifactId) + (maven-central/versions groupId artifactId)) + )) + +(defun ivy/parse-dependency () + (let ( end groupId artifactId ) + (save-excursion + (if (looking-at "[^>]*") + (setq end (point)) + (search-backward "<") + (save-restriction + (narrow-to-region (point) end) + (goto-char (point-min)) + (when (re-search-forward "\\s-org\\s-*=\\s-*['\"]\\([^'\"]+\\)['\"]" nil t) + (setq groupId (match-string 1))) + (goto-char (point-min)) + (when (re-search-forward "\\s-name\\s-*=\\s-*['\"]\\([^'\"]+\\)['\"]" nil t) + (setq artifactId (match-string 1))) + ))) + (list groupId artifactId))) + +;;;###autoload +(defun maven-central-last-version-from-ivy () + (interactive) + (let (dependency groupId artifactId) + (setq dependency (ivy/parse-dependency)) + (setq groupId (elt dependency 0)) + (setq artifactId (elt dependency 1)) + (when (and groupId artifactId) + (maven-central/last-version groupId artifactId)) + )) + +;;;###autoload +(defun maven-central-versions-from-ivy () + (interactive) + (let (dependency groupId artifactId) + (setq dependency (ivy/parse-dependency)) + (setq groupId (elt dependency 0)) + (setq artifactId (elt dependency 1)) + (when (and groupId artifactId) + (maven-central/versions groupId artifactId)) + )) + +(defun maven-central/parse-gradle-dependency () + (let ( groupId artifactId ) + (save-excursion + (goto-char (line-beginning-position)) + (when (re-search-forward "\\([\"']\\)\\([a-zA-Z0-9.-]+\\):\\([a-zA-Z0-9.-]+\\):?[^\"']*\\1" (line-end-position) t) + (setq groupId (match-string 2)) + (setq artifactId (match-string 3)) + (list groupId artifactId))))) + +;;;###autoload +(defun maven-central-last-version-from-gradle () + (interactive) + (let (dependency groupId artifactId) + (setq dependency (maven-central/parse-gradle-dependency)) + (setq groupId (elt dependency 0)) + (setq artifactId (elt dependency 1)) + (when (and groupId artifactId) + (maven-central/last-version groupId artifactId)) + )) + +;;;###autoload +(defun maven-central-versions-from-gradle () + (interactive) + (let (dependency groupId artifactId) + (setq dependency (maven-central/parse-gradle-dependency)) + (setq groupId (elt dependency 0)) + (setq artifactId (elt dependency 1)) + (when (and groupId artifactId) + (maven-central/versions groupId artifactId)) + )) + +(defun maven-central/open (groupId artifactId) + "Open in Maven Central WEB page info for package." + (browse-url (format "https://mvnrepository.com/artifact/%s/%s" groupId artifactId))) + +;;;###autoload +(defun maven-central-open-from-gradle () + (interactive) + (let (dependency groupId artifactId) + (setq dependency (maven-central/parse-gradle-dependency)) + (setq groupId (elt dependency 0)) + (setq artifactId (elt dependency 1)) + (when (and groupId artifactId) + (maven-central/open groupId artifactId)) + )) + +;; (maven-central/last-version "junit" "junit") + +(provide 'maven-central) + +;;; maven-central.el ends here diff -r 3685e2321a9b -r 06937ff1ec5f mylisp/maven.el --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mylisp/maven.el Sat Jan 02 00:33:04 2021 +0200 @@ -0,0 +1,140 @@ +;;; maven.el --- Maven build project helpers. + +;;; Commentary: +;; + +;;; Code: + +(defvar maven-command "mvn") + +(defvar maven/help-buffer-name "*Maven Help*") + +(defun maven/parse-pom-dependency-in-region (start end) + (let (groupId artifactId version) + (save-restriction + (narrow-to-region start end) + (goto-char start) + (re-search-forward "\\([^<]*\\)" nil t) + (setq groupId (match-string-no-properties 1)) + (goto-char start) + (re-search-forward "\\([^<]*\\)" nil t) + (setq artifactId (match-string-no-properties 1)) + (goto-char start) + (re-search-forward "\\([^<]*\\)" nil t) + (setq version (match-string-no-properties 1)) + (list groupId artifactId version) + ))) + +(defun maven/parse-pom-dependency (&optional point) + (let (start end pos groupId artifactId version fs-o bs-o fs-c bs-c) + (save-excursion + (if (looking-at "[^>]*<[^!]") + (progn (search-forward "<") (backward-char)) + (search-backward "<")) + (setq point (point)) + (when (re-search-forward "<\\(?:plugin\\|dependency\\)>" nil t) + (setq fs-o (re-search-backward "<" nil t))) + (goto-char point) + (setq bs-o (re-search-backward "<\\(?:plugin\\|dependency\\)>" nil t)) + (goto-char point) + (setq fs-c (re-search-forward "" nil t)) + (goto-char point) + (when (re-search-backward "" nil t) + (setq bs-c (re-search-forward ">" nil t))) + (cond + ((and fs-o (= fs-o point) fs-c) + (maven/parse-pom-dependency-in-region fs-o fs-c)) + ((and bs-o (<= bs-o point) fs-c (<= point fs-c)) + (maven/parse-pom-dependency-in-region bs-o fs-c)) + ((and fs-o fs-c) + (maven/parse-pom-dependency-in-region fs-o fs-c)) + ((and bs-o bs-c) + (maven/parse-pom-dependency-in-region bs-o bs-c)) + (t + (list nil nil nil))) + ))) +;; (pp (maven/parse-pom-dependency)) + +;;;###autoload +(defun maven-help () + "Run help:describe for plugin at point." + (interactive) + (let (dependency groupId artifactId) + (setq dependency (maven/parse-pom-dependency)) + (setq groupId (elt dependency 0)) + (setq artifactId (elt dependency 1)) + (if (not (and groupId artifactId)) + (message "Can't find `groupId' or `artifactId'") + (shell-command + (format "%s help:describe -Ddetail -DgroupId=%s -DartifactId=%s" maven-command groupId artifactId) + (switch-to-buffer maven/help-buffer-name)) ) + )) + +;;;###autoload +(defun maven-effective-pom () + "Run help:effective-pom for plugin at point." + (interactive) + (shell-command + (format "%s help:effective-pom" maven-command) + (switch-to-buffer maven/help-buffer-name)) ) + +;;;###autoload +(defun maven-effective-settings () + "Run help:effective-settings for plugin at point." + (interactive) + (shell-command + (format "%s help:effective-settings" maven-command) + (switch-to-buffer maven/help-buffer-name)) ) + +;;;###autoload +(defun maven-dependency-tree () + "Run dependency:tree for plugin at point." + (interactive) + (shell-command + (format "%s dependency:tree" maven-command) + (switch-to-buffer maven/help-buffer-name)) ) + +(defun maven/project-root () + "Root of project." + (let ( (dir default-directory) (found nil) ) + (while (and (not found) (> (length dir) 5)) + (when (file-exists-p (concat dir "/pom.xml")) + (setq found dir)) + (setq dir (expand-file-name (concat dir "/..")))) + found)) + +(defun maven/file-package () + "Return file package." + (save-excursion + (goto-char (point-min)) + (let (pkg cls) + (re-search-forward "package +\\([[:alnum:]_.]+\\) *;" nil t) + (setq pkg (match-string-no-properties 1)) + (re-search-forward "class\\s +\\([[:alnum:]_]+\\)\\(\\s \\|\n\\|implements [^{]*\\|extents [^{]*\\)*{" nil t) + (setq cls (match-string-no-properties 1)) + (when (and pkg cls) + (concat pkg "." cls))) )) + +;;;###autoload +(defun maven-run-file () + "Run exec:java for current file." + (interactive) + (let* ( (default-directory (concat (maven/project-root) "/")) ) + (if (not default-directory) + (message "Can't find maven project root") + (compilation-start + (format "%s exec:java -Dexec.mainClass=%s" maven-command (maven/file-package)))))) + +;;;###autoload +(defun maven-run-test () + "Run test -Dtest=... for current file." + (interactive) + (let* ( (default-directory (concat (maven/project-root) "/")) ) + (if (not default-directory) + (message "Can't find maven project root") + (compilation-start + (format "%s test -Dtest=%s" maven-command (maven/file-package)))))) + +(provide 'maven) + +;;; maven.el ends here diff -r 3685e2321a9b -r 06937ff1ec5f mylisp/my-log-mode.el --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mylisp/my-log-mode.el Sat Jan 02 00:33:04 2021 +0200 @@ -0,0 +1,72 @@ +;;; my-log-mode.el --- major mode for error logs + +;; Copyright (C) 2010 by Oleksandr Gavenko + +;; You can do anything with this file without any warranty. + +;; Author: Oleksandr Gavenko +;; Maintainer: Oleksandr Gavenko +;; Created: 2011-02-09 +;; Version: 0.1 +;; Keywords: logging + +;;; Commentary: +;; +;; Very pure release. + +;;; Code: + +(defun my-log-goto (point) + "Visit file according to error specification at POINT." + (interactive "d") + (let ( start stop line fname fline (fregex "^\\([^:]+\\):\\([[:digit:]]+\\):") ) + (save-excursion + (move-beginning-of-line 1) + (setq start (point)) + (move-end-of-line 1) + (setq stop (point)) + (setq line (filter-buffer-substring start stop)) + (string-match fregex line) + (setq fname (match-string 1 line)) + (when fname + (setq fline (string-to-number (match-string 2 line)))) + ) + (cond + ( (and fname (file-exists-p fname)) + (find-file-other-window fname) + (goto-char (point-min)) + (forward-line (1- fline)) ) + ( t + (if fname + (message "File '%s' is not found (default directory is '%s')." fname default-directory) + (message "No file under current line.") ) ) + ) + )) + +(defvar my-log-mode-map (make-sparse-keymap)) +(define-key my-log-mode-map (kbd "RET") 'my-log-goto) + +(require 'generic-x) + +;;;###autoload +(define-generic-mode + 'my-log-mode + nil + nil + '( + ("^\\([^:]+\\):\\([[:digit:]]+\\):[^ +]+$" (1 font-lock-function-name-face) (2 font-lock-type-face)) + ("^\\([^:]\\{1,10\\}\\):[^ +]+$" (1 font-lock-keyword-face)) + ) + ;; '("\\.log$") + nil + (list + (lambda nil + (use-local-map my-log-mode-map) + (modify-syntax-entry ?' ".") + (modify-syntax-entry ?\" ".") + )) + ) + +;;; my-log-mode.el ends here diff -r 3685e2321a9b -r 06937ff1ec5f mylisp/mypasshide.el --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mylisp/mypasshide.el Sat Jan 02 00:33:04 2021 +0200 @@ -0,0 +1,33 @@ + +(defvar mypasshide-prefix-re "^pass: *") + +(defun mypasshide--toggle-display (overlay hide) + "Hide or reveal region. Signature follows convention for +`reveal-toggle-invisible' from `reveal' mode." + (if hide + (overlay-put overlay 'display (propertize "****" 'face 'warning)) + (overlay-put overlay 'display nil))) + +(defun mypasshide--hide () + (save-excursion + (goto-char (point-min)) + (while (re-search-forward mypasshide-prefix-re nil t) + (let* ((beg (match-end 0)) + (end (line-end-position)) + (overlay (make-overlay beg end))) + (mypasshide--toggle-display overlay t) + (overlay-put overlay 'reveal-toggle-invisible #'mypasshide--toggle-display) + )))) + +;;;###autoload +(define-minor-mode mypasshide-mode + "Hide passwords after `mypasshide-prefix-re' and activate +`reveal-mode'. Disabling is not implemented." + :group 'reveal + (if mypasshide-mode + (progn + (mypasshide--hide) + (reveal-mode)))) + +(provide 'mypasshide) + diff -r 3685e2321a9b -r 06937ff1ec5f mylisp/pypi.el --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mylisp/pypi.el Sat Jan 02 00:33:04 2021 +0200 @@ -0,0 +1,41 @@ +;;; pypi.el --- Handle work with Python pypi site. + +;;; Commentary: +;; + +(require 'url-handlers) +(require 'thingatpt) + +(eval-when-compile + (defvar url-http-response-status)) + +;;; Code: + +(defvar pypi/buffer-name "*Pip*") + +(defvar pypi/pkg-history nil) + +(defvar pypi/url "https://pypi.python.org/pypi/%s/json") + +(defun pypi/pkg-callback (status) + (let ( (buffer (current-buffer)) content-type status ) + (setq content-type (mail-fetch-field "Content-Type")) + (setq status url-http-response-status) + (switch-to-buffer pypi/buffer-name) + (erase-buffer) + (url-insert buffer) + (fundamental-mode) + (when (and (eq status 200) (string-match "application/json" content-type)) + (js-mode)))) + +;;;###autoload +(defun pypi-pkg (pkg) + (interactive (list + (read-string "Python package: " + (if (region-active-p) (buffer-substring (mark) (point)) (thing-at-point 'symbol)) + 'pypi/pkg-history))) + (url-retrieve (format pypi/url pkg) #'pypi/pkg-callback)) + +(provide 'pypi) + +;;; pypi.el ends here diff -r 3685e2321a9b -r 06937ff1ec5f mylisp/spring-actuator.el --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mylisp/spring-actuator.el Sat Jan 02 00:33:04 2021 +0200 @@ -0,0 +1,33 @@ + +(require 'json) +(require 'js) + +(defvar spring-actuator-server-history nil) +(defvar spring-actuator-last-server "http://localhost:8080") +(defvar spring-actuator-path-history nil) +(defvar spring-actuator-path-completion + '("actuator" "auditevents" "autoconfig" "beans" "configprops" "dump" "env" "features" "flyway" "health" "heapdump" + "info" "jolokia" "liquibase" "logfile" "loggers" "mappings" "metrics" "trace")) + +;;;###autoload +(defun spring-actuator (server path) + (interactive (list (read-string "Server: " spring-actuator-last-server 'spring-actuator-server-history) + (completing-read "Path: " spring-actuator-path-completion nil nil "" 'spring-actuator-path-history))) + (setq spring-actuator-last-server server) + (let ( (bufname (format "actuator: %s" path)) ) + (when (get-buffer bufname) + (kill-buffer bufname)) + (switch-to-buffer (url-retrieve-synchronously (format "%s/%s" server path))) + (rename-buffer bufname) + (goto-char (point-min)) + (re-search-forward "^$" nil 'move) + (forward-char) + (delete-region (point-min) (point)) + (json-pretty-print-buffer) + (goto-char (point-min)) + (if (fboundp 'json-mode) + (json-mode) + (js-mode)) + (setq-local js-indent-level 2))) + +(provide 'spring-actuator) diff -r 3685e2321a9b -r 06937ff1ec5f mypasshide.el --- a/mypasshide.el Sat Jan 02 00:27:54 2021 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,33 +0,0 @@ - -(defvar mypasshide-prefix-re "^pass: *") - -(defun mypasshide--toggle-display (overlay hide) - "Hide or reveal region. Signature follows convention for -`reveal-toggle-invisible' from `reveal' mode." - (if hide - (overlay-put overlay 'display (propertize "****" 'face 'warning)) - (overlay-put overlay 'display nil))) - -(defun mypasshide--hide () - (save-excursion - (goto-char (point-min)) - (while (re-search-forward mypasshide-prefix-re nil t) - (let* ((beg (match-end 0)) - (end (line-end-position)) - (overlay (make-overlay beg end))) - (mypasshide--toggle-display overlay t) - (overlay-put overlay 'reveal-toggle-invisible #'mypasshide--toggle-display) - )))) - -;;;###autoload -(define-minor-mode mypasshide-mode - "Hide passwords after `mypasshide-prefix-re' and activate -`reveal-mode'. Disabling is not implemented." - :group 'reveal - (if mypasshide-mode - (progn - (mypasshide--hide) - (reveal-mode)))) - -(provide 'mypasshide) - diff -r 3685e2321a9b -r 06937ff1ec5f pypi.el --- a/pypi.el Sat Jan 02 00:27:54 2021 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,41 +0,0 @@ -;;; pypi.el --- Handle work with Python pypi site. - -;;; Commentary: -;; - -(require 'url-handlers) -(require 'thingatpt) - -(eval-when-compile - (defvar url-http-response-status)) - -;;; Code: - -(defvar pypi/buffer-name "*Pip*") - -(defvar pypi/pkg-history nil) - -(defvar pypi/url "https://pypi.python.org/pypi/%s/json") - -(defun pypi/pkg-callback (status) - (let ( (buffer (current-buffer)) content-type status ) - (setq content-type (mail-fetch-field "Content-Type")) - (setq status url-http-response-status) - (switch-to-buffer pypi/buffer-name) - (erase-buffer) - (url-insert buffer) - (fundamental-mode) - (when (and (eq status 200) (string-match "application/json" content-type)) - (js-mode)))) - -;;;###autoload -(defun pypi-pkg (pkg) - (interactive (list - (read-string "Python package: " - (if (region-active-p) (buffer-substring (mark) (point)) (thing-at-point 'symbol)) - 'pypi/pkg-history))) - (url-retrieve (format pypi/url pkg) #'pypi/pkg-callback)) - -(provide 'pypi) - -;;; pypi.el ends here diff -r 3685e2321a9b -r 06937ff1ec5f spring-actuator.el --- a/spring-actuator.el Sat Jan 02 00:27:54 2021 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,33 +0,0 @@ - -(require 'json) -(require 'js) - -(defvar spring-actuator-server-history nil) -(defvar spring-actuator-last-server "http://localhost:8080") -(defvar spring-actuator-path-history nil) -(defvar spring-actuator-path-completion - '("actuator" "auditevents" "autoconfig" "beans" "configprops" "dump" "env" "features" "flyway" "health" "heapdump" - "info" "jolokia" "liquibase" "logfile" "loggers" "mappings" "metrics" "trace")) - -;;;###autoload -(defun spring-actuator (server path) - (interactive (list (read-string "Server: " spring-actuator-last-server 'spring-actuator-server-history) - (completing-read "Path: " spring-actuator-path-completion nil nil "" 'spring-actuator-path-history))) - (setq spring-actuator-last-server server) - (let ( (bufname (format "actuator: %s" path)) ) - (when (get-buffer bufname) - (kill-buffer bufname)) - (switch-to-buffer (url-retrieve-synchronously (format "%s/%s" server path))) - (rename-buffer bufname) - (goto-char (point-min)) - (re-search-forward "^$" nil 'move) - (forward-char) - (delete-region (point-min) (point)) - (json-pretty-print-buffer) - (goto-char (point-min)) - (if (fboundp 'json-mode) - (json-mode) - (js-mode)) - (setq-local js-indent-level 2))) - -(provide 'spring-actuator) diff -r 3685e2321a9b -r 06937ff1ec5f upgrade/2.bash --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/upgrade/2.bash Sat Jan 02 00:33:04 2021 +0200 @@ -0,0 +1,24 @@ +#!/bin/bash + +set -x -e + +emacsdir=~/.emacs.d +compatfile=$emacsdir/.emacs-ver +mylispdir_old=$emacsdir/my +mylispdir_new=$emacsdir/mylisp + +if ! [[ -f $compatfile ]]; then + echo 'Cannot detect compatibility.' + exit 1 +fi +read ver <$compatfile +if [[ $ver != 1 ]]; then + echo 'Script is designed only for upgrade: v1 => v2.' + exit 1 +fi + +rm $mylispdir_old/init.el || : +mv $mylispdir_old $mylispdir_new || : +rm $emacsdir/.emacs-my.elc || : + +echo 2 >$compatfile