Fixed bugs and made things more consistent, ha-

Making the Git menu more consistent as well.
This commit is contained in:
Howard Abrams 2021-11-08 16:02:39 -08:00
parent 3774244434
commit f337048da3
3 changed files with 30 additions and 27 deletions

View file

@ -705,9 +705,10 @@ To do this, we need a way to generate a string of the perspectives in alphabetic
number and NAMES is a list of strings."
(when names
(concat
(format " %d: %s" ; Shame that the following doesn't work:
(format " %d: %s%s" ; Shame that the following doesn't work:
num ; (propertize (number-to-string num) :foreground "#00a0")
(car names)) ; Nor does surrounding the number with underbars.
(car names) ; Nor does surrounding the number with underbars.
(if (equal (car names) (projectile-project-name)) "*" ""))
(ha--persp-label (1+ num) (cdr names)))))
(defun ha-persp-labels ()
@ -730,9 +731,9 @@ Build the hydra as well as configure the =perspective= project.
Workspaces- %s(ha-persp-labels)
_n_: new project _r_: rename _a_: add buffer _l_: load worksp
_]_: next worksp _d_: delete _b_: goto buffer _s_: save worksp
_[_: previous _W_: init all _k_: remove buffer
"
_[_: previous _W_: init all _k_: remove buffer _`_: to last worksp "
("TAB" persp-switch)
("`" persp-switch-last)
("1" (persp-switch-by-number 1))
("2" (persp-switch-by-number 2))
("3" (persp-switch-by-number 3))
@ -889,8 +890,8 @@ Can not live without [[https://magit.vc/][Magit]], a Git porcelain for Emacs. I
"g o" '(:ignore t :which-key "open")
"g c" '(:ignore t :which-key "create")
"g c r" '("Initialize repo" . magit-init)
"g c R" '("Clone repo" . magit-clone)
"g c R" '("Initialize repo" . magit-init)
"g c C" '("Clone repo" . magit-clone)
"g c c" '("Commit" . magit-commit-create)
"g c f" '("Fixup" . magit-commit-fixup)
"g c b" '("Branch" . magit-branch-and-checkout)))

View file

@ -33,27 +33,27 @@ Functions to help convert content from the operating system's clipboard into org
Each operating system as a different way of working with the clipboard, so let's create an operating-system abstraction:
#+BEGIN_SRC emacs-lisp
(defun ha/get-clipboard ()
(defun ha-get-clipboard ()
"Returns a list where the first entry is the content type,
either :html or :text, and the second is the clipboard contents."
(if (eq system-type 'darwin)
(ha/get-mac-clipboard)
(ha/get-linux-clipboard)))
(ha-get-mac-clipboard)
(ha-get-linux-clipboard)))
#+END_SRC
Let's define the clipboard for a Mac. The challenge here is that we need to binary unpack the data from a call to Applescript.
#+BEGIN_SRC emacs-lisp
(defun ha/get-mac-clipboard ()
(defun ha-get-mac-clipboard ()
"Returns a list where the first entry is the content type,
either :html or :text, and the second is the clipboard contents."
(destructuring-bind (exit-code contents)
(shell-command-with-exit-code "osascript" "-e" "the clipboard as \"HTML\"")
(if (= 0 exit-code)
(list :html (ha/convert-applescript-to-html contents))
(list :html (ha-convert-applescript-to-html contents))
(list :text (shell-command-to-string "osascript -e 'the clipboard'")))))
(defun ha/convert-applescript-to-html (packed-contents)
(defun ha-convert-applescript-to-html (packed-contents)
"Applescript's clipboard returns the contents in a packed array.
Convert and return this encoding into a UTF-8 string."
(cl-flet ((hex-pack-bytes (tuple) (string-to-number (apply 'string tuple) 16)))
@ -70,8 +70,8 @@ Convert and return this encoding into a UTF-8 string."
And define the same interface for Linux. Keep in mind, we need the exit code from calling a process, so I am going to define/use a helper function (that really should go into the piper project).
#+BEGIN_SRC emacs-lisp
(defun ha/get-linux-clipboard ()
"Return the clipbaard for a Unix-based system. See `ha/get-clipboard'."
(defun ha-get-linux-clipboard ()
"Return the clipbaard for a Unix-based system. See `ha-get-clipboard'."
(destructuring-bind (exit-code contents)
(shell-command-with-exit-code "xclip" "-o" "-t" "text/html")
(if (= 0 exit-code)
@ -90,7 +90,7 @@ And define the same interface for Linux. Keep in mind, we need the exit code fro
We can assume that most non-HTML text could be Slack-like:
#+BEGIN_SRC emacs-lisp
(defun ha/slack-to-markdown-buffer ()
(defun ha-slack-to-markdown-buffer ()
"Odd function that converts Slacks version of Markdown (where
code is delimited with triple backticks) into a more formal
four-space indent markdown style."
@ -123,29 +123,29 @@ four-space indent markdown style."
Let's work top-down at this point with the interactive function that inserts the clipboard into the current buffer:
#+BEGIN_SRC emacs-lisp
(defun ha/org-yank-clipboard ()
(defun ha-org-yank-clipboard ()
"Yanks (pastes) the contents of the Apple Mac clipboard in an
org-mode-compatible format."
(interactive)
(insert (ha/org-clipboard)))
(insert (ha-org-clipboard)))
#+END_SRC
The heavy lifting, however is done by this function. Note that I will need another function to tidy up the output from =pandoc= that will be more to my liking.
#+BEGIN_SRC emacs-lisp
(defun ha/org-clipboard ()
(defun ha-org-clipboard ()
"Return the contents of the clipboard in org-mode format."
(seq-let (type contents) (ha/get-clipboard)
(seq-let (type contents) (ha-get-clipboard)
(with-temp-buffer
(insert contents)
(if (eq :html type)
(shell-command-on-region (point-min) (point-max) "pandoc -f html -t org" t t)
(ha/slack-to-markdown-buffer)
(ha-slack-to-markdown-buffer)
(shell-command-on-region (point-min) (point-max) "pandoc -f markdown -t org" t t))
(ha/html-paste-touchup)
(ha-html-paste-touchup)
(buffer-substring-no-properties (point-min) (point-max)))))
(defun ha/html-paste-touchup ()
(defun ha-html-paste-touchup ()
"Attempts to fix the org produced by `pandoc'' that seems to plague us."
(interactive)
(dolist (combo '((" (edited) " " ") ; Slack appends this phrase that is never needed
@ -164,11 +164,11 @@ The heavy lifting, however is done by this function. Note that I will need anoth
#+END_SRC
* Keybinding to Paste into Org Files
We
We just need to bind it to the /local/ mode key sequence:
#+BEGIN_SRC emacs-lisp
(general-evil-define-key 'normal org-mode-map
:prefix "SPC m"
"y" 'ha/org-yank-clipboard)
"y" 'ha-org-yank-clipboard)
#+END_SRC
* Technical Artifacts :noexport:

View file

@ -290,10 +290,12 @@ To make the snippets more context aware, this predicate
(plist-get (cadr (org-element-at-point)) :language)))
#+END_SRC
** Keybindings
Ugh
Keybindings specific to org files:
#+BEGIN_SRC emacs-lisp :tangle no
(ha-leader :keymaps 'org-mode-map
"m l" 'org-insert-link)
(general-evil-define-key 'normal org-mode-map
:prefix "SPC m"
"e" 'org-export-dispatch
"y" 'org-insert-link)
#+END_SRC
* Supporting Packages
At this point, we assume that the =use-package= for org is complete, so we can close it and allow other projects to be loaded: