diff options
| author | Craig Jennings <c@cjennings.net> | 2025-11-24 05:54:37 -0800 |
|---|---|---|
| committer | Craig Jennings <c@cjennings.net> | 2025-11-24 05:54:37 -0800 |
| commit | c0066af134cb0ffb21889b455963c6917fd690e7 (patch) | |
| tree | 234df34ee4405028e2a95bb5312ef8ffb776be8f /modules | |
| parent | 42a649d38043dfe5aee15e3fc2d6dcce4483cd40 (diff) | |
feat(dwim-shell): fix M-D menu binding and enhance audio extraction
- Fix dwim-shell-commands-menu keybinding in dirvish/dired
- Remove :after (dired dirvish) which prevented package loading
- Add :demand t to load package immediately at startup
- Move keybindings inside :config block after menu function definition
- M-D now works immediately in dirvish without manual trigger
- Enhance extract-audio-from-video function
- Fix :extensions parameter (was regex string, now proper list)
- Change from copy to AAC re-encoding for codec compatibility
- Add interactive bitrate selection (64k/96k/128k/192k)
- Fixes Opus codec compatibility issues with M4A containers
- Remove conflicting keybindings
- Remove music-config p binding in dirvish (was overriding path copy)
- Clean up extraneous requires/hooks from troubleshooting
- Add TODO for dwim-shell-command status dashboard [#D priority]
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Diffstat (limited to 'modules')
| -rw-r--r-- | modules/dirvish-config.el | 15 | ||||
| -rw-r--r-- | modules/dwim-shell-config.el | 28 | ||||
| -rw-r--r-- | modules/music-config.el | 4 |
3 files changed, 25 insertions, 22 deletions
diff --git a/modules/dirvish-config.el b/modules/dirvish-config.el index fc399d11..5577b9f1 100644 --- a/modules/dirvish-config.el +++ b/modules/dirvish-config.el @@ -14,10 +14,10 @@ ;; - G: Search with deadgrep in current directory ;; - f: Open system file manager in current directory ;; - o/O: Open file with xdg-open/custom command -;; - l: Copy file path (project-relative or home-relative) -;; - L: Copy absolute file path -;; - P: Copy file path (same as 'l', replaces dired-do-print) -;; - M-D: DWIM menu (context actions for files) +;; - l: Copy org-link with relative file path (project-relative or home-relative) +;; - p: Copy absolute file path +;; - P: Copy relative file path (project-relative or home-relative) +;; - M-S-d (Meta-Shift-d): DWIM shell commands menu ;; - TAB: Toggle subtree expansion ;; - F11: Toggle sidebar view @@ -314,9 +314,8 @@ regardless of what file or subdirectory the point is on." ("C-." . dirvish-history-go-forward) ("F" . dirvish-file-info-menu) ("G" . revert-buffer) - ("l" . (lambda () (interactive) (cj/dired-copy-path-as-kill))) ;; overwrites dired-do-redisplay - ("L" . (lambda () (interactive) (cj/dired-copy-path-as-kill nil t))) ;; copy absolute path ("h" . cj/dirvish-open-html-in-eww) ;; it does what it says it does + ("l" . (lambda () (interactive) (cj/dired-copy-path-as-kill t nil))) ;; copy as org-link, relative path ("M" . cj/dired-mark-all-visible-files) ("M-e" . dirvish-emerge-menu) ("M-l" . dirvish-ls-switches-menu) @@ -330,8 +329,9 @@ regardless of what file or subdirectory the point is on." ("g" . dirvish-quick-access) ("o" . cj/xdg-open) ("O" . cj/open-file-with-command) ; Prompts for command to run + ("p" . (lambda () (interactive) (cj/dired-copy-path-as-kill nil t))) + ("P" . (lambda () (interactive) (cj/dired-copy-path-as-kill))) ("r" . dirvish-rsync) - ("P" . cj/dired-copy-path-as-kill) ("s" . dirvish-quicksort) ("v" . dirvish-vc-menu) ("y" . dirvish-yank-menu))) @@ -429,5 +429,6 @@ Returns nil if not in a project." (t nil))) + (provide 'dirvish-config) ;;; dirvish-config.el ends here. diff --git a/modules/dwim-shell-config.el b/modules/dwim-shell-config.el index a05646b2..1881f791 100644 --- a/modules/dwim-shell-config.el +++ b/modules/dwim-shell-config.el @@ -90,16 +90,10 @@ (require 'cl-lib) - -;; Bind menu to dired (after dwim-shell-command loads) -(with-eval-after-load 'dwim-shell-command - (with-eval-after-load 'dired - (keymap-set dired-mode-map "M-D" #'dwim-shell-commands-menu))) - ;; ----------------------------- Dwim Shell Command ---------------------------- (use-package dwim-shell-command - :after (dired dirvish) + :demand t :bind (("<remap> <shell-command>" . dwim-shell-command) :map dired-mode-map ("<remap> <dired-do-async-shell-command>" . dwim-shell-command) @@ -606,10 +600,14 @@ in process lists or command history." (defun cj/dwim-shell-commands-extract-audio-from-video () "Extract audio track from video file(s)." (interactive) - (dwim-shell-command-on-marked-files - "Extract audio" - "ffmpeg -i '<<f>>' -vn -acodec copy '<<fne>>.m4a'" - :utils "ffmpeg")) + (let ((bitrate (completing-read "Audio bitrate: " + '("64k" "96k" "128k" "192k") + nil t))) + (dwim-shell-command-on-marked-files + "Extract audio" + (format "ffmpeg -i '<<f>>' -vn -c:a aac -b:a %s '<<fne>>.m4a'" bitrate) + :utils "ffmpeg" + :extensions '("mp4" "mkv" "webm" "avi" "mov" "flv" "wmv" "m4v" "mpg" "mpeg" "ogv" "3gp" "ts")))) (defun cj/dwim-shell-commands-normalize-audio-volume () "Normalize audio volume in file(s)." @@ -809,7 +807,13 @@ gpg: decryption failed: No pinentry" 'dwim-shell-command-history)) (command (alist-get selected command-alist nil nil #'string=))) (when command - (call-interactively command))))) + (call-interactively command)))) + + ;; Bind menu to keymaps after function is defined + (with-eval-after-load 'dired + (keymap-set dired-mode-map "M-D" #'dwim-shell-commands-menu)) + (with-eval-after-load 'dirvish + (keymap-set dirvish-mode-map "M-D" #'dwim-shell-commands-menu))) (provide 'dwim-shell-config) ;;; dwim-shell-config.el ends here. diff --git a/modules/music-config.el b/modules/music-config.el index 0994bf82..f60ff36a 100644 --- a/modules/music-config.el +++ b/modules/music-config.el @@ -407,9 +407,7 @@ Dirs added recursively." ((file-directory-p file) (cj/music-add-directory-recursive file)) ((cj/music--valid-file-p file) (emms-add-file file)) (t (message "Skipping non-music file: %s" file)))) - (message "Added %d item(s) to playlist" (length files)))) - - (keymap-set dirvish-mode-map "p" #'cj/music-add-dired-selection)) + (message "Added %d item(s) to playlist" (length files))))) ;;; EMMS setup and keybindings |
