LINUX.ORG.RU

Conditional keybindings in Emacs (Dired-open + Dired-single-bindings in emacs-lisp)

 , ,


0

1

Пытаюсь подружить нижеизложенный key binding с dired-open. Дело в том, что с ним по нажанитю RET всегда вызывается dired-find-alternate-file, что оверврайтит binding от dired-open. Моя идея состоит в том чтобы узанавать является ли текущий dired-get-filename дирректорией или файлом используя file-directory-file и в зависимости от возвращаемого значения вызывать либо dired-open, либо dired-find-alternate-file... Проблема в том что я очень зеленый в emacs-lisp и уже битые часы не в состояниии вписать это условие наместо 'dired-find-alternate-file.

(require 'dired )
(define-key dired-mode-map (kbd "RET") 'dired-find-alternate-file) 
(define-key dired-mode-map (kbd "<backspace>") (lambda () (interactive) (find-alternate-file "..")))  

Помогите пожалуйста, если вы поняли (прошу прощения) о чем идет речь, кодом, советом, вариантом использования dired-open по RET на файлах и dired-find-alternate-file по RET на дирректорию.


Если новичок в Emacs, то нужно читать его исходники и брать примеры оттуда. Вот функция dired-view-file из файла dired.el

(defun dired-view-file ()
  "In Dired, examine a file in view mode, returning to Dired when done.
When file is a directory, show it in this buffer if it is inserted.
Otherwise, display it in another buffer."
  (interactive)
  (let ((file (dired-get-file-for-visit)))
    (if (file-directory-p file)
	      (or (and (cdr dired-subdir-alist)
		             (dired-goto-subdir file))
	          (dired file))
      (find-alternate-file file))))

anonymous
()
Ответ на: комментарий от anonymous

Я уже начал привыкать использовать f для открытия файлов ! Спасибо, к сожалению, я слишком глуп для этого, не думал что придется настолько погружаться в Emacs… Конечно есть некоторый прогресс в понимании elisp code, но до чтения исходников мне еще как до … ну, в общем, далеко.

Код в итоге выглядит так, goolage уже проиндексировал топик, мб. кому - либо будет полезно.

;; Reuse dired buffer. Dired-open if the path is a file, dired-find-alternate-file if is a directory.
(defun dired-custom-view-file ()
  (interactive)
  (let ((file (dired-get-file-for-visit)))
    (if (file-directory-p file)
	  (dired-find-alternate-file)
          (dired-open-by-extension))))
(define-key dired-mode-map (kbd "RET") 'dired-custom-view-file)

Благодарю еще раз !

oOoOo
() автор топика
Последнее исправление: oOoOo (всего исправлений: 2)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.