GNU emacs: установка сочетаний клавиш для выделения текста с помощью клавиши Shift - PullRequest
2 голосов
/ 12 ноября 2010

Я пытаюсь установить некоторые сочетания клавиш для использования клавиши Shift для выделения текста.Я мог бы использовать pc-selection-mode, но это не предлагает все привязки клавиш, которые я хочу.Например, я хотел бы иметь возможность сдвигать отметку по всему абзацу, нажимая Shift-Ctrl-down , что я могу сделать в большинстве текстовых редакторов MS, но pc-selection-mode не позволяет вамсделать это.

Я нашел этот веб-сайт , в котором есть файл shift_mark.el, который я могу использовать для установки всех желаемых привязок клавиш.Я загрузил .xemacs/init.el файл для загрузки shift_mark.el.

Это ошибка:

Warning (initialization): An error occurred while loading `/home/theory/phrkaj/\
.xemacs/init.el':

Wrong type argument: arrayp, (shift right)

Итак, я запустил Emacs с --debug-init, чтобы попытаться найтиэта проблема.Вот что придумал отладчик:

Debugger entered--Lisp error: (wrong-type-argument arrayp (shift right))
  signal(wrong-type-argument (arrayp (shift right)))
  global-set-key((shift right) shift-mark-forward-char)
  eval-buffer(#<buffer  *load*<3>> nil "/home/theory/phrkaj/shift_mark.el" nil t)  ; Reading at buffer position 1476
  load-with-code-conversion("/home/theory/phrkaj/shift_mark.el" "/home/theory/phrkaj/shift_mark.el" nil nil)
  load("~/shift_mark.el")
  eval-buffer(#<buffer  *load*<2>> nil "/home/theory/phrkaj/.xemacs/init.el" nil t)  ; Reading at buffer position 25
  load-with-code-conversion("/home/theory/phrkaj/.xemacs/init.el" "/home/theory/phrkaj/.xemacs/init.el" nil nil)
  load("/home/theory/phrkaj/.xemacs/init.el" nil nil t)
  load-file("/home/theory/phrkaj/.xemacs/init.el")
  eval-buffer(#<buffer  *load*> nil "/home/theory/phrkaj/.emacs" nil t)  ; Reading at buffer position 253
  load-with-code-conversion("/home/theory/phrkaj/.emacs" "/home/theory/phrkaj/.emacs" t t)
  load("~/.emacs" t t)
  #[nil "^H\205\264^@   \306=\203^Q^@\307^H\310Q\2027^@ \311=\2033^@\312\307\313\314#\203#^@\315\2027^@\312\307\313\316#\203/^@\317\2027^@\315\2027^@\307^H\320Q^Z\321^S\322\n\321\211#\210^K\321=\203_^@\323\324\325\307^H\326Q!\"^\\322\f\$
  command-line()
  normal-top-level()

Вот часть файла shift_mark.el, который определяет выделение одного символа вперед:

(defun shift-mark-forward-char ()
  (interactive)
  (shift-mark 'forward-char))

(global-set-key '(shift right) 'shift-mark-forward-char)

Любая помощь приветствуется.

Ответы [ 2 ]

3 голосов
/ 12 ноября 2010

В GNU Emacs привязка ключей должна выглядеть следующим образом:

(global-set-key [(shift right)] 'shift-mark-forward-char)

([…] создает буквенный массив).Но я подозреваю, что вы ошибаетесь.Вы используете GNU Emacs, XEmacs или оба?Какие версии?Если вы не используете чрезвычайно старые версии, pc-selection-mode должен делать то, что вы хотите в GNU Emacs, и в XEmacs не требуется никаких настроек.Если вы используете как GNU Emacs, так и XEmacs, вы можете использовать следующий код в .emacs:

(defvar running-xemacs (string-match "XEmacs" emacs-version))
(if (not running-xemacs)
    (pc-selection-mode 1))
1 голос
/ 15 марта 2011

Ch v shift-select-mode RET

shift-select-mode - переменная, определенная в `simple.el».Его значение равно nil

Документация: если не ноль, сдвинутые клавиши перемещения кратковременно активируют метку.

Пока метка активирована таким образом, любая перемещенная клавиша перемещения точки сдвига расширяет область, и если режим Transient Mark был отключен, он временно включается.Кроме того, метка будет деактивирована любой последующей клавишей движения точки, которая не была переведена смещением, или любым действием, которое обычно деактивирует метку в режиме переходной метки.

См. `This-command-keys-shift-переведено 'для значения shift-translation.

Вы можете настроить эту переменную.

Эта переменная была введена в GNU Emacs 23.1:

** Временно активные регионы

* Новая переменная shift-select-mode, по умолчанию отличная от nil, управляет выбором shift.Когда включен режим Shift Select, клавиши перемещения со сдвигом (например, S-left и S-down) активируют и расширяют временную область, аналогично выделению мышью.

* Временно активенобласти, созданные с помощью shift-selection или mouse-selection, не обязательно деактивируются в следующей команде.Они деактивируются только после команд перемещения точки, которые не переведены смещением, или после команд, которые обычно деактивируют метку в режиме переходной метки (например, любая команда, которая изменяет буфер).

...