LINUX.ORG.RU

На что тебе удобно, на то и вешай. Если ломается стандартное, то можно перебиндить стандартное.

theNamelessOne ★★★★★
()

можешь поставить key-chord и забиндить на то же самое. Делай как удобно.

feofan ★★★★★
()

на функциональные клавиши:

(global-set-key [f1] 'woman)
(global-set-key [f2] 'write-file)
(global-set-key [f3] 'isearch-forward-word)
(global-set-key [f4] 'isearch-forward-regexp)
(global-set-key [f5] 'revert-buffer)
(global-set-key [f6] 'calculator)
(global-set-key [f7] nil)
(global-set-key [f8] 'other-window)
(global-set-key [f9] 'neotree-toggle)
например

olibjerd ★★★★★
()
Ответ на: комментарий от theNamelessOne

А есть какой-нибудь инструмент, который проверяет мои биндинги и говорит, какие из них перекрывают стандартные, а какие нет?

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

C-h k — это я знаю.

Я имел в виду, возможность получения таблицы (списка): первый столбец — биндинг, второй столбец — биндинг по умолчанию, третий столбец — команда.

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

Я имел в виду, возможность получения таблицы (списка):

Из коробки такой возможности нет (или я про неё не знаю).

Но свелосипедить самому не сложно, вот примерный код (требует установки log4e из MELPA):

(require 'log4e)
(log4e:deflogger "report-rebind" "%t [%l] %m" "%H:%M:%S")

;;; taken from `help--binding-lokus'
(defun report-rebind--keymap-name (map)
  (catch 'found
    (let ((advertised-syms (nconc
                            (list 'overriding-terminal-local-map
                                  'overriding-local-map)
                            (delq nil
                                  (mapcar
                                   (lambda (mode-and-map)
                                     (let ((mode (car mode-and-map)))
                                       (when (symbol-value mode)
                                         (intern-soft
                                          (format "%s-map" mode)))))
                                   minor-mode-map-alist))
                            (list 'global-map
                                  (intern-soft (format "%s-map" major-mode)))))
          found)
      ;; Look into these advertised symbols first.
      (dolist (sym advertised-syms)
        (when (and
               (boundp sym)
               (eq map (symbol-value sym)))
          (throw 'found sym)))
      ;; Only look in other symbols otherwise.
      (mapatoms
       (lambda (x)
         (when (and (boundp x)
                    ;; Avoid let-bound symbols.
                    (special-variable-p x)
                    (eq (symbol-value x) map))
           (throw 'found x))))
      nil)))

(defun define-key-report-rebind (keymap key def)
  (let ((binding (lookup-key keymap key))
        (key-desc (key-description key))
        (keymap-name (report-rebind--keymap-name keymap)))
    (cond ((null binding)
           (report-rebind--log-info "new binding %S for key %s in keymap %s"
                                    def key-desc keymap-name))
          ((numberp binding)
           (report-rebind--log-error "key %s doesn't make a valid key sequence"
                                     key-desc))
          ((eq binding def)
           (report-rebind--log-warn "same binding %S for key %s in keymap %s"
                                    def key-desc keymap-name))
          (t
           (report-rebind--log-warn "rebind key %s in keymap %s: old binding was %S; new one is %S"
                                    key-desc keymap-name binding def)))))

(defun report-rebind-start ()
  (report-rebind--log-enable-logging)
  (advice-add 'define-key :before #'define-key-report-rebind))

(defun report-rebind-stop ()
  (report-rebind--log-disable-logging)
  (advice-remove 'define-key #'define-key-report-rebind))

(defmacro report-rebind (&rest body)
  (declare (indent 0))
  `(progn
     (report-rebind-start)
     (unwind-protect
         (progn ,@body)
       (report-rebind-stop))))

(defalias 'report-rebind-show #'report-rebind--log-open-log)

Дальше просто оберни все биндинги в своём конфиге в макрос report-rebind, например:

(report-rebind
  (global-set-key (kbd "C-c C-a") #'org-agenda)
  (global-set-key (kbd "C-c C-a") #'save-buffers-kill-emacs))

Чтобы посмотреть результат, выполни M-x report-rebind-show RET.

theNamelessOne ★★★★★
()

ломать стандартное не просто можно, но и нужно. emacs - это анархия, используй его как хочешь.

x4DA ★★★★★
()

на что обычно в эмаксе биндят своё, чтобы не поломать стандартное?

По какому запросу вы гуглили? По «gnu emacs user key bindings» первой же ссылкой возвращается Key Binding Conventions (она же (info "(elisp) Key Binding Conventions")), где английским по белому сказано:

— ... Sequences consisting of C-c and a letter (either upper or lower case) are reserved for users; they are the only sequences reserved for users, so do not block them.
Changing all the Emacs major modes to respect this convention was a lot of work; abandoning this convention would make that work go to waste, and inconvenience users. Please comply with it.
— Function keys F5 through F9 without modifier keys are also reserved for users to define.

Zmicier ★★★★★
()

чтобы не поломать стандартное

Не бойся ломать стандартное, во-первых всегда доступны полные имена функций, во-вторых можешь закомментить свой код и запустить емакс без него, посмотреть что было на что забиндено. В общем случае такое возникает очень редко, ведь даже если хоткей забинден, то ты его не знаешь == не используешь, то все нормально.

loz ★★★★★
()
Ответ на: комментарий от olibjerd

на что обычно в эмаксе биндят своё, чтобы не поломать стандартное ?

на функциональные клавиши:
(global-set-key [f1] 'woman)
(global-set-key [f2] 'write-file)
(global-set-key [f3] 'isearch-forward-word)
(global-set-key [f4] 'isearch-forward-regexp)

Неверно. Это справка, двухколочночное редактирование, запись макроса, конец записи / воспроизведение макроса соотвественно.

Zmicier ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.