emacs-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [NonGNU Elpa] New package: ETT


From: Philip Kaludercic
Subject: Re: [NonGNU Elpa] New package: ETT
Date: Wed, 03 May 2023 06:08:31 +0000

John Task <q01@disroot.org> writes:

> [Disclaimer: A similar message was posted here a couple months ago by
>  me.  Sorry if that's an annoyance.  This one is clearer, though.]
>
> Hello.  My name is John Task and I'd like to submit a package to
> NonGNU ELPA.  I'm the author of this program and also (at the time of
> writing) the only contributor to the code.  As far as I can tell,
> everything is in line with the guidances and I plan to keep it that
> way.
>
> The URL of the repository is: https://gitlab.com/q01_code/ett
>
> The description is as follows:
>
> ----------------------------------------------------------------------
> Emacs Time Tracker (or short ETT) is a simple yet powerful time
> tracker for Emacs. Even though it's based on a minimalist plain
> text file, it can show statistics for current day, week, month or
> year, and even compare tags recording for the same item given any
> of these periods.
>
> Advanced features include percentages, graphs and icons.
>
> Clock-in with M-x ett-add-track, go to file with M-x ett-find-file,
> and get report with M-x ett-report. You probably want to bind these
> functions to easy keys.
> ----------------------------------------------------------------------
>
> The corresponding patch would be:
>
> ---
> From 72c7ba2c1ecd375be52b071d25217088e66e9abb Mon Sep 17 00:00:00 2001
> From: John Task <q01@disroot.org>
> Date: Tue, 2 May 2023 17:40:44 -0300
> Subject: [PATCH] New package
>
> ---
>  elpa-packages | 5 +++++
>  1 file changed, 5 insertions(+)
>
> diff --git a/elpa-packages b/elpa-packages
> index c333cc8bb3..385a76264d 100644
> --- a/elpa-packages
> +++ b/elpa-packages
> @@ -154,6 +154,11 @@
>    :readme "README.md"
>    :ignored-files ("doc/demo.gif"))
>  
> + (ett                :url "https://gitlab.com/q01_code/ett";
> +  :readme ignore
> +  :doc "ett-manual.org"
> +  :ignored-files ("ett-manual.org" "COPYING" "ETT.png" "doclicense.texi"))
> + 
>   (evil                       :url "https://github.com/emacs-evil/evil";
>    :ignored-files ("COPYING" "lib" "scripts")
>    :doc "doc/build/texinfo/evil.texi")

I would track the ignored files in a .elpaignore file that would look
something like this

--8<---------------cut here---------------start------------->8---
/ett-pkg.el
/ett-autoloads.el
/ett-manual.org
/COPYING
/ETT.png
/doclicense.texi
--8<---------------cut here---------------end--------------->8---

and I have prepared a few comments here:

diff --git a/ett.el b/ett.el
index c37d7f15b0..de6a017248 100644
--- a/ett.el
+++ b/ett.el
@@ -89,7 +89,7 @@ Something like '-->' or '====>' would be acceptable."
 Unlike `ett-separator', you can safely change this to anything you want."
   :type '(string))
 
-(defcustom ett-file (concat user-emacs-directory "tracks.ett")
+(defcustom ett-file (locate-user-emacs-file "tracks.ett")
   "File for storing ETT tracks."
   :type '(file))
 
@@ -125,10 +125,10 @@ size to be displayed.
 Only even numbers are allowed.  Indeed, it's a weird bug."
   :type '(natnum))
 
-(defcustom ett-graph-icon "│"
+(defcustom ett-graph-icon ?│
   "Icon used for building ETT graphs.
 It must be a single char string."
-  :type '(string))
+  :type 'character)
 
 (defface ett-heading
   '((((class color) (min-colors 88) (background light))
@@ -170,7 +170,7 @@ It must be a single char string."
         (list "^\\(Less time .*\\): " '(1 'underline))
         (list "^\\(Tags report\\):$" '(1 'underline))
         (list "^\\(Pending goals\\):$" '(1 'underline))
-        (list (concat ett-graph-icon "+") '(0 'ett-separator-face)))
+        (list (concat (string ett-graph-icon) "+") '(0 'ett-separator-face)))
   "Keywords for syntax highlighting on ETT report buffer.")
 
 (defvar ett-items-internal nil)
@@ -269,41 +269,36 @@ Here are some translations (*starred* values are current 
at the time):
 3-2      ---> 03-02-*23*
 03       ---> 03-*02*-*23*
 3        ---> 03-*02*-*23*"
-  (pcase (length date)
-    ;; DD-MM-YY
-    (8 date)
-    ;; DD-MM
-    (5 (setq date (concat date (format-time-string "-%y"))))
-    ;; DD
-    (2 (setq date (concat date (format-time-string "-%m-%y"))))
-    ;; D
-    (1 (setq date (concat "0" date (format-time-string "-%m-%y"))))
-    ;; DD-M
-    (4
-     (setq date
-           ;; Or D-MM?
-           (pcase (string-search "0" date)
-             (2 (concat "0" date (format-time-string "-%y")))
-             (_ (concat
+  (setq date
+       (pcase (length date)
+         ;; DD-MM-YY
+         (8 date)
+         ;; DD-MM
+         (5 (concat date (format-time-string "-%y")))
+         ;; DD
+         (2 (concat date (format-time-string "-%m-%y")))
+         ;; D
+         (1 (concat "0" date (format-time-string "-%m-%y")))
+         ;; DD-M
+         (4
+          ;; Or D-MM?
+          (pcase (string-search "0" date)
+            (2 (concat "0" date (format-time-string "-%y")))
+            (_ (concat
                  (replace-regexp-in-string "-\\(.*\\)" "-0\\1" date)
-                 (format-time-string "-%y"))))))
-    ;; D-M
-    (3 (setq date
-             (concat "0" (replace-regexp-in-string "-\\(.*\\)" "-0\\1" date)
-                     (format-time-string "-%y"))))
-    ;; D-MM-YY
-    (7 (setq date
-             ;; Or DD-M-YY?
-             (pcase (string-search "0" date)
-               (2 (concat "0" date))
-               (_ (concat
-                   (replace-regexp-in-string "-\\(.*\\)-" "-0\\1-" date))))))
-    ;; D-M-YY (who writes like that?)
-    (6 (setq date
-             (concat "0"
-                     (replace-regexp-in-string "-\\(.*\\)-" "-0\\1-" date)))))
-  ;; Return date
-  date)
+                 (format-time-string "-%y")))))
+         ;; D-M
+         (3 (concat "0" (replace-regexp-in-string "-\\(.*\\)" "-0\\1" date)
+                    (format-time-string "-%y")))
+         ;; D-MM-YY
+         (7 ;; Or DD-M-YY?
+          (pcase (string-search "0" date)
+            (2 (concat "0" date))
+            (_ (concat
+                (replace-regexp-in-string "-\\(.*\\)-" "-0\\1-" date)))))
+         ;; D-M-YY (who writes like that?)
+         (6 (concat "0"
+                    (replace-regexp-in-string "-\\(.*\\)-" "-0\\1-" date))))))
 
 (defun ett-custom-date (date &optional date2)
   "Operate on current buffer so the only date is DATE.
@@ -329,7 +324,7 @@ With optional DATE2, include every date between DATE and 
DATE2."
         (ett-finalize-scope "00:00")))))
 
 (defun ett-do-division (num1 num2)
-  "Divide NUM1 between NUM2."
+  "Divide NUM1 between NUM2."          ;can you explain why this is needed?
   (if (/= (% num1 num2) 0)
       (/ (float num1) num2)
     (/ num1 num2)))
@@ -511,7 +506,7 @@ Like `insert-rectangle', but doesn't set mark."
           (insert
            (mapconcat #'concat (make-list (- col (current-column)) " ") "")))
         (ett-insert-rectangle
-         (make-list graph-f ett-graph-icon)))
+         (make-list graph-f (string ett-graph-icon))))
       (setq list (cdr list)
             col (current-column)))
     (setq beacon (point)
@@ -545,7 +540,7 @@ Like `insert-rectangle', but doesn't set mark."
 (defun ett-prettify-time (time)
   "Return a prettified string for TIME."
   (let ((hr 0))
-    (while (>= time 60)
+    (while (>= time 60)                        ;the loop here shouldn't be 
necessary, you can calculate the same thing using remainder and floor
       (setq hr (1+ hr)
             time (- time 60)))
     (concat
@@ -789,7 +784,7 @@ When NOTOTAL is non-nil, don't add total indicator."
     (save-excursion
       ;; Sort items
       ;; We need to do it in two steps because it's somehow complicated
-      (sort-regexp-fields t "^.*$" "\\(:[0-9]+\\)" (point-min) (point-max))
+      (sort-regexp-fields t "^.*$" "\\(:[0-9]+\\)" (point-min) (point-max)) 
;have you considered using rx?
       (sort-regexp-fields t "^.*$" "\\([0-9]+:\\)" (point-min) (point-max))
       ;; We now align
       (align-regexp
@@ -1174,13 +1169,27 @@ Use the command `ett-modeline-mode' to change this 
variable.")
     ;; Clock in
     (ett-add-track item tag)))
 
+(defvar ett-view-mode-map
+  (let ((map (make-sparse-keymap)))
+    (define-key map (kbd "C-c C-c") #'ett-add-track)
+    (define-key map (kbd "SPC") #'ett-space-dwim)
+    map))
+
 (define-derived-mode ett-mode text-mode "ETT"
   "Major mode for editing ETT based texts."
   (setq font-lock-defaults '(ett-font-lock-keywords t))
-  (setq-local outline-regexp "[0-9]+-[0-9]+-[0-9]+")
+  (setq-local outline-regexp "[0-9]+-[0-9]+-[0-9]+") ;does this need to start 
with a ^
   ;; show-paren-mode can be somehow annoying here
   (show-paren-local-mode -1))
 
+(defvar ett-view-mode-map
+  (let ((map (make-sparse-keymap)))
+    (define-key map (kbd "q") #'bury-buffer)
+    (define-key map (kbd "SPC") #'ett-choose-view)
+    (define-key map (kbd "<up>") #'scroll-down-command)
+    (define-key map (kbd "<down>") #'scroll-up-command)
+    map))
+
 (define-derived-mode ett-view-mode ett-mode "ETT [report]"
   "Major mode for viewing ETT reports."
   (setq font-lock-defaults '(ett-view-font-lock-keywords t))
@@ -1188,15 +1197,8 @@ Use the command `ett-modeline-mode' to change this 
variable.")
   (setq-local view-read-only nil)
   (setq cursor-type nil))
 
-(define-key ett-view-mode-map (kbd "q") #'bury-buffer)
-(define-key ett-view-mode-map (kbd "SPC") #'ett-choose-view)
-(define-key ett-view-mode-map (kbd "<up>") #'scroll-down-command)
-(define-key ett-view-mode-map (kbd "<down>") #'scroll-up-command)
-(define-key ett-mode-map (kbd "C-c C-c") #'ett-add-track)
-(define-key ett-mode-map (kbd "SPC") #'ett-space-dwim)
-
 ;;;###autoload
-(add-to-list 'auto-mode-alist (cons (purecopy "\\.ett\\'") 'ett-mode))
+(add-to-list 'auto-mode-alist '("\\.ett\\'" . ett-mode))
 
 (provide 'ett)
 

reply via email to

[Prev in Thread] Current Thread [Next in Thread]