Go to the first, previous, next, last section, table of contents.


Personnalisation et options

Ceci est la troisième partie de la FAQ XEmacs. Cette section traite de la personnalisation et de la configuration de l'écran.

Quelle est la version d'Emacs que j'utilise ?

Comment `.emacs' fait-il pour savoir par quelle famille d'Emacs il est utilisé ?

Pour savoir si vous êtes en train d'exécuter GNU Emacs 18, GNU Emacs 19, XEmacs 19, XEmacs 20, ou Epoch et utiliser le code approprié, étudiez l'exemple donné dans `etc/sample.emacs'. Il s'y trouve aussi d'autres choses intéressantes !

Pour tout nouveau code, tout ce que vous avez à faire est :

(defvar running-xemacs (string-match "XEmacs\\|Lucid" emacs-version))

Comment évaluer les expressions Emacs-Lisp ?

Je sais que je peux évaluer des expressions Elisp à partir du tampon *scratch* avec C-j après l'expression. Comment le faire dans un autre tampon ?

Pressez M-: (l'association de touches par défaut pour eval-expression) et entrez l'expression dans le minitampon. Dans les XEmacs antérieurs à 19.15, eval-expression était une commande désactivée par défaut. Si c'est le cas, mettez votre XEmacs à jour.

NdT : Vous pouvez aussi évaluer directement l'expression dans le tampon où elle a été entrée en vous plaçant à la droite de sa parenthèse fermante et en tapant C-x C-e.

(setq tab-width 6) se comporte mal

Si vous placez (setq tab-width 6) dans votre fichier `.emacs', cela ne fonctionne pas ! Y a t'il une raison à cela ? Si vous le faites au prompt EVAL, cela fonctionne bien !! Étrange.

Utilisez setq-default à la place, car tab-width est local à un tampon.

Comment ajouter des répertoires au load-path ?

Voici deux méthodes, l'une place vos répertoires devant le load-path, l'autre à la fin :

;;; Ajoute au debut du load-path, n'ajoute pas 
;;; les repertoires dupliques :
(pushnew "bar" load-path :test 'equal)

(pushnew "foo" load-path :test 'equal)

;;; Ajoute à la fin, systématiquement
(setq load-path (nconc load-path '("foo" "bar")))

keith (k.p.) hanlan <keithh@nortel.ca> écrit :

Pour ajouter des noms de répertoires utilisant les métacaractères du shell Unix, utilisez `expand-file-name' comme ceci :

(push (expand-file-name "~keithh/.emacsdir") load-path)

Comment vérifier qu'une fonction lisp est définie ?

Utilisez le code elisp suivant :

(fboundp 'foo)

C'est presque toujours une erreur de tester emacs-version ou tout autre variable similaire.

Au lieu de cela, utilisez des « feature-tests », comme featurep, boundp, fboundp, ou même de simples tests comme :

(defvar foo-old-losing-code-p 
  (condition-case nil (progn (losing-code t) nil)
   (wrong-number-of-arguments t)))

Il existe un volume incroyable de code défectueux qui pourrait fonctionner bien mieux si ce qui est décrit plus haut était fait au lieu d'essayer de deviner la valeur de l'environnement à partir de la valeur d'une variable.

Puis-je forcer la sortie de (face-list) vers un tampon ?

Ce serait bien de l'avoir dans un tampon car la sortie de (face-list) est trop importante pour tenir dans un minitampon.

Évaluez l'expression dans le tampon `*scratch*' avec le point après la parenthèse la plus à droite et tapez C-j.

Si la petite taille du minitampon est le seul problème que vous rencontrez, vous pouvez simplement faire C-h l pour charger le contenu du minitampon dans un buffer.

Les choix de fontes ne sont pas sauvegardées après Save Options.

Pour XEmacs 19.14 et inférieurs :

John Mann <mannj@ll.mit.edu> écrit :

Vous devez allez dans Options->Menubar Appearance et déselectionner `Frame-Local Font Menu'. Si cette option est choisie, les changements de fontes ne s'appliquent qu'au cadre courant et ne seront pas sauvegardées avec les options.

Pour XEmacs 19.15 et supérieurs :

Faites ce qui est décrit plus haut et mettez ce qui suit dans votre `.emacs' :

(setq options-save-faces t)

Comment faire un cadre de minitampon séparé ?

Vin Shelton <acs@acm.org> écrit :

(setq initial-frame-plist '(minibuffer nil))
(setq default-frame-plist '(minibuffer nil))
(setq default-minibuffer-frame
      (make-frame
	'(minibuffer only
                     width 86
                     height 1
                     menubar-visible-p nil
                     default-toolbar-visible-p nil
                     name "minibuffer"
                     top -2
                     left -2
                     has-modeline-p nil)))
(frame-notice-user-settings)

REMARQUE : Un cadre de minitampon séparé peut ne pas convenir à tout le monde et beaucoup d'autres options de configuration de XEmacs peuvent rendre son utilisation difficile ou peu pratique.

Qu'est-ce que Customize ?

Depuis XEmacs 20.2, il y a un nouveau système Customize pour la personnalisation des options de XEmacs.

Vous pouvez accéder à Customize via le menu Options ou en invoquant l'une des commandes de personnalisation, telles que M-x customize, M-x customize-face, M-x customize-variable ou M-x customize-apropos.

Depuis XEmacs 20.3, il y a aussi un nouveau mode navigateur pour Customize. Testez-le avec M-x customize-browse.

Où trouver une liste des ressources X ?

Recherchez `X Resources' dans le fichier `NEWS'. Une liste assez complète y est donnée.

De plus, un fichier `app-defaults' est fourni et énumère les valeurs par défaut : il s'appelle `etc/Emacs.ad'. Le fichier `etc/sample.Xdefaults' offre un ensemble de valeurs par défaut que vous pouvez étudier. Ce sont pratiquement les mêmes que celles de `etc/Emacs.ad' mais certaines entrées ont été légèrement modifiées. Faites attention lorsque vous intégrez le contenu de ce fichier dans votre `.Xdefaults' ou `.Xresources' si vous utilisez aussi GNU Emacs sous X11.

Comment détecter un écran couleur ?

Vous pouvez tester la valeur renvoyée par la fonction (device-class) de la façon suivante :

(when (eq (device-class) 'color)
  (set-face-foreground  'font-lock-comment-face "Grey")
  (set-face-foreground  'font-lock-string-face  "Red")
  ....
  )

(set-screen-width) fonctionnait en 19.6, mais pas en 19.13 ?

Avec Lucid Emacs 19.6, j'avais (set-screen-width characters) et (set-screen-height lines) dans mon `.emacs' au lieu de préciser Emacs*EmacsScreen.geometry dans mon `.Xdefaults' mais XEmacs 19.13 le refuse.

Ces deux fonctions prennent maintenant des cadres comme arguments :

(set-frame-width (selected-frame) characters)
(set-frame-height (selected-frame) lines)

Emacs*EmacsScreen.geometry dans `.emacs' ne fonctionne plus en 19.15 ?

Avec XEmacs 19.11, je précisais Emacs*EmacsScreen.geometry dans mon `.emacs' mais cela ne fonctionne plus avec XEmacs 19.15.

Nous sommes passés de l'utilisation du terme screen au terme frame.

L'entrée correcte pour votre `.Xdefaults' est désormais :

Emacs*EmacsFrame.geometry

Comment avoir l'icone qui ne dit que `XEmacs' ?

J'aimais l'icone qui n'affichait que `XEmacs' sans le nom du fichier courant.

Ajoutez la ligne suivante à votre `.emacs' :

(setq frame-icon-title-format "XEmacs")

Comment avoir le chemin complet dans la barre de titre ?

Je voudrai que la barre de titre affiche le nom/répertoire complet du fichier du tampon courant au lieu de son simple nom.

Ajoutez la ligne suivante à votre `.emacs' :

(setq frame-title-format "%S: %f")

Un titre plus sophistiqué pourrait être :

(setq frame-title-format
  '("%S: " (buffer-file-name "%f" (dired-directory dired-directory "%b"))))

C'est-à-dire, utiliser le nom du fichier ou le répertoire dired, ou le nom du tampon.

`xemacs -name junk' ne fonctionne pas ?

Quand je lance `xterm -name junk', j'obtiens un xterm dont le nom de classe, selon xprop, est `junk' et je suppose que c'est normal. Lorsque je lance `xemacs -name junk' le nom de la classe n'est pas `junk', c'est encore `emacs'. Que fait vraiment `xemacs -name' ? Je pose la question car mon gestionnaire de fenêtres (fvwm) fera une fenêtre « sticky » et j'utilise XEmacs pour lire mon courrier. Je veux que la fenêtre XEmacs soit sticky, sans avoir à utiliser les fonctions du gestionnaire de fenêtres pour le faire. Que faire ?

`xemacs -name' configure le nom de l'application pour le programme (c'est ce qui provient normalement de `argv[0]'). Utiliser `-name' revient à faire une copie de l'exécutable pour qu'il ait ce nouveau nom. La propriété WM_CLASS de chaque cadre est configurée avec le nom du cadre et de la classe de l'application. Donc, si vous faites `xemacs -name FOO' et que vous créez un cadre nommé BAR, vous obtiendrez une fenêtre X avec WM_CLASS = ( "BAR", "Emacs"). Cependant, la hiérarchie des ressources pour ce widget sera :

Name:    FOO   .shell             .container   .BAR
Class:   Emacs .TopLevelEmacsShell.EmacsManager.EmacsFrame

au lieu de celle par défaut :

Name:    xemacs.shell             .container   .emacs
Class:   Emacs .TopLevelEmacsShell.EmacsManager.EmacsFrame

On pourrait faire remarquer que le premier élément de WM_CLASS devrait être le nom de l'application au lieu de celui du cadre. Je pense que ce serait moins souple car cela ne donnerait pas la possibilité d'avoir plusieurs cadres avec différentes propriétés WM_CLASS. Une autre possibilité serait d'avoir un nom de cadre par défaut venant du nom de l'application au lieu que ce soit simplement `emacs'. Cependant, cette modification serait source de problèmes : elle signifierait que de nombreux utilisateurs devraient alors modifier leurs fichiers ressources (car le nom de cadre par défaut changerait subitement d'`emacs' à `xemacs', ou tout autre nom de l'exécutable), nous préférons éviter cela.

Pour obtenir un cadre portant un nom particulier, faites :

(make-frame '((name . "le-nom")))

`-iconic' ne fonctionne pas

XEmacs lancé avec `-iconic' ne fonctionne pas bien. Utiliser `-unmapped' en ligne de commande et configurer la ressource X initiallyUnmapped ne semble pas beaucoup aider...

Ben Wing <ben@666.com> écrit :

Ahem, ce truc est tellement embrouillé que j'ai envie de renoncer à le faire fonctionner. Le problème principal vient des nombreux bugs du gestionnaire de fenêtres...

Comment configurer les options couleurs à partir du `.emacs' ?

Comment puis-je configurer les couleurs les plus fréquemment utilisées à partir de mon `.emacs' au lieu de mon `.Xdefaults' ?

Comme ceci :

(set-face-background 'default      "bisque")     ; fond du cadre
(set-face-foreground 'default      "black")      ; texte normal
(set-face-background 'zmacs-region "red")        ; Quand on selectionne
                                                 ; avec la souris
(set-face-foreground 'zmacs-region "yellow")
(set-face-font       'default      "*courier-bold-r*120-100-100*")
(set-face-background 'highlight    "blue")       ; Quand on selectionne
                                                 : des tampons
(set-face-foreground 'highlight    "yellow")
(set-face-background 'modeline     "blue")       ; Ligne en bas du tampon
(set-face-foreground 'modeline     "white")
(set-face-font       'modeline     "*bold-r-normal*140-100-100*")
(set-face-background 'isearch      "yellow")     ; Mise en evidence pendant
                                                 ; la recherche
(set-face-foreground 'isearch      "red")
(setq x-pointer-foreground-color   "black")      ; S'ajoute a la couleur du fond
                                                 ; reste donc noir
(setq x-pointer-background-color   "blue")       ; Ceci est la couleur que vous
                                                 ; voulez vraiment pour ptr/crsr

Comment configurer les fontes du texte, du menu et de la ligne de mode ?

Vous devriez utiliser `Emacs.' et non `Emacs*' lorsque vous configurez les valeurs d'aspect.

Dans `.Xdefaults':

Emacs.default.attributeFont:  -*-*-medium-r-*-*-*-120-*-*-m-*-*-* 
Emacs*menubar*font:           fixed
Emacs.modeline.attributeFont: fixed

Ceci est source de confusion, car modeline est un aspect et peut être listé avec tous les aspects du mode courant à l'aide de M-x set-face-font (enter) ?. Il utilise la spécification d'aspect d'attributeFont, tandis que menubar est une chose X normale qui utilise la spécification font. Avec Motif il peut être nécessaire d'utiliser fontList au lieu de font.

Comment configurer les couleurs lorsqu'on met en évidence d'une région ?

Comment puis-je configurer les couleurs d'arrière/premier plan lorsqu'on met en évidence une région ?

Vous pouvez modifier l'aspect zmacs-region, soit dans votre `.Xdefaults' :

Emacs.zmacs-region.attributeForeground: firebrick
Emacs.zmacs-region.attributeBackground: lightseagreen

soit dans votre `.emacs' :

(set-face-background 'zmacs-region "red")   
(set-face-foreground 'zmacs-region "yellow")

Comment limiter l'utilisation de la carte des couleurs ?

J'utilise Netscape (ou un autre gouffre à couleurs comme XEmacs) : y a t-il moyen de limiter le nombre de couleurs disponibles dans la palette ?

XEmacs 19.13 ne dispose pas d'un tel mécanisme (à la différence de Netscape ou autres applications voraces en couleurs). Une solution consiste à lancer XEmacs avant Netscape, car cela empêchera Netscape de capturer toutes les couleurs (mais il s'en plaindra). Vous pouvez utiliser des options pour Netscape, comme -mono, -ncols <#> ou -install (pour monochrome, limitation à <#> couleurs, or pour l'utilisation d'une carte de couleur privée). Comme Netscape prendra la palette complète et ne la libèrera jamais, le seul moyen raisonnable de le lancer est d'utiliser `-install'.

Si vous avez de l'argent, une autre solution consiste à utiliser une classe d'affichage truecolor ou direct color.

À partir de XEmacs 19.14, XEmacs utilise la couleur disponible la plus proche si la palette est pleine, cela permet donc, maintenant, de lancer Netscape en premier.

J'ai un terminal couleur, mais XEmacs ne les utilise pas

XEmacs essaie de déterminer automatiquement si votre terminal sait gérer la couleur, mais n'y parvient pas toujours. Dans ce cas, vous pouvez le remettre dans le bon chemin et utilisant le code Lisp :

(if (eq 'tty (device-type))
    (set-device-class nil 'color))

Comment se débarrasser de la ligne de mode ?

(set-specifier has-modeline-p nil)

À partir de XEmacs 19.14, la ligne de mode répond aux clics de la souris, donc si vous n'aimiez pas, ou si vous n'utilisiez pas, la ligne de mode offerte par les versions précédentes, essayez une version récente.

Comment afficher le numéro de ligne dans la ligne de mode ?

Ajoutez la ligne suivante dans votre fichier `.emacs' pour afficher le numéro de ligne :

(setq line-number-mode t)  

Utilisez ce qui suit pour afficher le numéro de colonne :

(display-column-mode t)

Ou choisissez, à partir du menu Options, Customize->Emacs->Editing->Basics->Line Number Mode et/ou Customize->Emacs->Editing->Basics->Column Number Mode.

Ou encore, tapez M-x customize RET editing-basics RET.

Comment mettre l'heure dans la ligne de mode ?

Ajoutez la ligne suivante dans votre fichier `.emacs' pour afficher l'heure :

(display-time)

Voir Customize à partir du menu Options pour les personnalisations.

Comment désactiver la chapitre courant de la ligne de mode d'AUC TeX ?

Avec AUC TeX, la frappe rapide est difficile car le chapitre, la section, etc. courants sont affichés dans la ligne de commande. Comment désactiver cela ?

Ce n'est pas AUC TeX, mais func-menu dans `func-menu.el'. Ajoutez ce code à votre `.emacs' pour le désactiver :

(setq fume-display-in-modeline-p nil)

Ou ajoutez simplement un hook à TeX-mode-hook pour ne le désactiver que pour le mode TeX :

(add-hook 'TeX-mode-hook '(lambda () (setq fume-display-in-modeline-p nil)))

David Hughes <dhughes@origin-at.co.uk> écrit :

Si votre version est 19.14 ou supérieure, essayez plutôt ceci : vous aurez encore le nom de la fonction affichée dans la ligne de mode, mais cela n'essaiera plus de garder une trace lorsque vous modifiez le fichier. Pour rafraîchir lorsque cela n'est plus synchronisé, cliquez simplement sur l'option `Rescan Buffer' dans le menu function.

(setq-default fume-auto-rescan-buffer-p nil)

Comment changer la couleur de la ligne de mode en fonction du mode utilisé ?

Vous pouvez faire la chose suivante :

(add-hook 'lisp-mode-hook 
          (lambda ()
            (set-face-background 'modeline "red" (current-buffer))))

Désormais, lorsque vous éditerez un fichier Lisp (i.e. en mode Lisp), la ligne de mode changera par rapport à la configuration par défaut décrite dans votre `.emacs'. Le changement ne sera fait que dans le tampon dans lequel vous venez d'entrer (celui qui contient le fichier Lips que vous éditez) et n'affectera pas les couleurs des autres lignes de mode.

Remarques :

Cela fonctionne aussi avec la version 19.15, mais il y a des aspects de la ligne de mode supplémentaires, modeline-buffer-id, modeline-mousable et modeline-mousable-minor-mode, que vous pouvez personnaliser.

Comment ouvrir un cadre sur un autre écran de mon affichage multiple ?

Cette gestion a été réorganisée pour la version 19.14. Utilisez la commande M-x make-frame-on-display. Elle se trouve aussi dans le menu File.

XEmacs 19.14 et supérieurs disposent aussi de la commande make-frame-on-tty qui permet d'établir une connexion vers n'importe quel périphérique de type terminal. L'ouverture des périphériques TTY doit, cependant, être laissée à gnuclient.

Puis-je vraiment me connecter à un XEmacs par un appel modem ? Comment ?

Si vous n'avez pas au moins XEmacs 19.14, vous ne le pouvez pas. Sinon, étudiez le programme gnuattach fourni avec XEmacs. À partir de XEmacs 20.3, les fonctionnalités de gnuattach et gnudoit sont fournies par gnuclient.

Voir aussi See section Comment empêcher gnuserv d'ouvrir un nouveau cadre ?.

Comment lier des fonctions complexes (ou des macros) à des touches ?

Comme exemple, supposons que vous vouliez que la touche paste d'un clavier Sun insère la sélection primaire X courante à l'endroit du point. Vous pouvez obtenir cela avec :

(define-key global-map [f18] 'x-insert-selection)

Cependant, cela ne fonctionne que s'il y a une sélection X courante (la sélection sera mise en évidence). La fonctionnalité que j'apprécie pour la touche paste est d'insérer la sélection X courante s'il y en a une et d'insérer le contenu du clipboard sinon. Pour ce faire, on doit passer des arguments à x-insert-selection en l'enveloppant dans une lambda :

(global-set-key [f18]
                (lambda () (interactive) (x-insert-selection t nil)))

Ceci lie la touche F18 à un objet fonctionnel générique. La spécification interactive est nécessaire car seules les fonctions de ce type peuvent être liées à des touches.

Pour l'exemple de la FAQ, vous pourriez utiliser :

(global-set-key [(control ?.)]
		(lambda () (interactive) (scroll-up 1)))
(global-set-key [(control ?;)]
	        (lambda () (interactive) (scroll-up -1)))

Ceci est pratique si vous n'avez besoin que de quelques fonctions dans le corps de la lambda (fonction anonyme). Si vous en faites plus, il est plus propre de définir une fonction séparée comme dans la question 3.5.3 (See section Comment lier C-. et C-; au défilement d'une ligne vers le haut et le bas ?).

Comment empêcher la flèche vers le bas d'ajouter une ligne vide à la fin de mes tampons ?

Ajoutez la ligne suivante à votre fichier `.emacs' :

(setq next-line-add-newlines nil)

Ceci a été la configuration par défaut de XEmacs pendant un certain temps.

Comment lier C-. et C-; au défilement d'une ligne vers le haut et le bas ?

Ajoutez ce qui suit à `.emacs' (Merci à Richard Mlynarik <mly@adoc.xerox.com> et Wayne Newberry <wayne@zen.cac.stratus.com>) :

(defun scroll-up-one-line ()
  (interactive)
  (scroll-up 1))

(defun scroll-down-one-line ()
  (interactive)
  (scroll-down 1))

(global-set-key [(control ?.)] 'scroll-up-one-line)        ; C-.
(global-set-key [(control ?;)] 'scroll-down-one-line)      ; C-;

Le point clé est que vous ne pouvez lier que des fonctions simples aux touches ; vous ne pouvez associer une touche à une fonction à laquelle vous passez aussi des arguments.

(Voir See section Comment lier des fonctions complexes (ou des macros) à des touches ? pour une meilleure réponse).

Lier globalement Delete ?

Je n'arrive pas à lier globalement ma touche Delete à quelque chose d'autre que la valeur par défaut. Comment fait-on ?

(defun foo ()
  (interactive)
  (message "Vous avez pressé DELETE"))

(global-set-key 'delete 'foo)

Cependant, certains modes lient explicitement Delete, vous devez donc ajouter un hook utilisant local-set-key pour ceux-ci. Si ce que vous voulez est que les touches Backspace et Delete fonctionnent comme sur un PC/Motif-like, jettez un coup d'oeil au paquetage `delbs.el'.

Avec XEmacs 19.14, la nouvelle variable key-translation-map facilite l'affectation de Delete. `delbs.el' est un bon exemple de la façon correcte de procéder.

Voir aussi See section Puis-je activer les touches modifieurs sticky ?.

Défilement d'une ligne à la fois

Est-ce que les touches du curseur peuvent faire défiler l'écran ligne par ligne plutôt que faire un saut par défaut d'une demi-page ? C'est plutôt déroutant !

Essayez ceci :

(defun scroll-one-line-up (&optional arg)
  "Defilement de la fenetre choisie d'une ligne (ou N lignes) vers l'avant
  (interactive "p")
  (scroll-up (or arg 1)))

(defun scroll-one-line-down (&optional arg)
  "Defilement de la fenetre choisie d'une ligne (ou N lignes) vers l'arriere
  (interactive "p")
  (scroll-down (or arg 1)))

(global-set-key [up]   'scroll-one-line-up)
(global-set-key [down] 'scroll-one-line-down)

Ce qui suit fonctionne aussi mais fera plus qu'affecter seulement les touches du curseur (i.e. C-n and C-p) :

(setq scroll-step 1)

À partir de XEmacs-20.3, vous pouvez aussi utiliser Customize. Choisissez Customize->Emacs->Environment->Windows->Scroll Step... à partir du menu Options, ou tapez M-x customize RET windows RET.

Comment associer la touche Help d'un clavier Sun type4 ?

Ce qui suit fonctionne avec GNU Emacs 19 :

(global-set-key [help] 'help-command)  		;; Help

Ce qui suit fonctionne avec XEmacs 19.15 en combinaison avec shift :

(global-set-key [(shift help)] 'help-command)   ;; Help

Mais cela ne suffit pas. Lire le fichier `PROBLEMS' que vous avez dû avoir avec votre installation XEmacs : Emacs ignore la touche help lorsque vous utilisez OLWM.

OLWM utilise la touche help et la retransmet au client approprié en utilisant XSendEvent. Permettre à Emacs de réagir à des événements synthétiques est une faille dans la sécurité et cela est donc désactivé par défaut. Vous pouvez l'activer en configurant la variable x-allow-sendevents à t. Vous pouvez aussi régler ce problème en indiquant à OLWM de ne pas utiliser la touche help à l'aide de la liaison nulle OpenWindows.KeyboardCommand.Help:.

Comment taper des caractères spéciaux avec XEmacs ?

Une méthode est d'utiliser le paquetage `x-compose'. Vous pouvez alors utiliser des séquences comme Compose " a pour obtenir ä, etc.

Une autre consiste à utiliser le paquetage `iso-insert', fourni avec XEmacs 19.15 et supérieurs. Vous pouvez alors utiliser des séquences comme C-x 8 " a pour obtenir ä, etc.

Pourquoi (global-set-key [delete-forward] 'delete-char) ne fonctionne pas ?

pourquoi (define-key global-map [ delete-forward ] 'delete-char) se plaint de ne pouvoir lier une touche inconnue ?

Essayez plutôt ceci :

(define-key global-map [delete_forward] 'delete-char)

et cela fonctionnera.

Ce que vous voyez ci-dessus est un bug dû au code qui vérifie la syntaxe GNU Emacs comme :

(define-key global-map [C-M-a] 'delete-char)

ce qui, sinon, ne causerait pas d'erreur mais n'aboutirait pas au résultat attendu.

Ce bug a été corrigé dans la version 19.14.

Comment faire pour que la touche Delete détruise vers l'avant ?

Avex XEmacs-20.2, utilisez le paquetage `delbs' :

(require 'delbs)

Cela vous donnera les fonctions delbs-enable-delete-forward pour mettre les choses en place et delbs-disable-delete-forward pour revenir au comportement « normal ». Notez que le paquetage `delbackspace' est obsolète.

À partir de XEmacs-20.3, une meilleure solution est de configurer la variable delete-key-deletes-forward à t. Vous pouvez aussi modifier cela avec Customize. Choisissez Customize->Emacs->Editing->Basics->Delete Key Deletes Forward à partir du menu Options. ou tapez M-x customize RET editing-basics RET.

Voir See section Lier globalement Delete ?.

Puis-je activer les touches modifieurs sticky ?

Oui, avec (setq modifier-keys-are-sticky t). Ceci aura pour effet que l'on pourra presser et relâcher la touche Shift et avoir le prochain caractère tapé en majuscule. Cela affectera aussi toutes les autres touches modifieurs comme Control et Meta.

Ben Wing <ben@666.com> écrit :

Une chose à propos des modifieurs sticky : si vous déplacez la souris en dehors du cadre et que vous revenez dedans, cela annule tous les modifieurs couramment « collés ».

Y a t'il moyen d'agrandir le trait du curseur ?

Je voudrais avoir un trait de curseur un peu plus épais car j'ai tendance à le perdre souvent.

Pour un curseur d'un pixel, utilisez :

(setq bar-cursor t)

Pour une curseur de 2 pixels, utilisez :

(setq bar-cursor 'anything-else)

Depuis XEmacs-20.3, vous pouvez aussi changer cela avec Customize. Choisissez Customize->Emacs->Environment->Display->Bar Cursor... à partir du menu Options, ou tapez M-x customize RET display RET.

Vous pouvez utiliser une couleut, grâce à une ressource X :

Emacs*cursorColor:	Red

Y a t'il moyen de revenir à l'ancien bloc curseur ?

(setq bar-cursor nil)

Depuis XEmacs-20.3, vous pouvez aussi changer cela avec Customize. Choisissez Customize->Emacs->Environment->Display->Bar Cursor... à partir du menu Options, ou tapez M-x customize RET display RET.

Puis-je faire clignoter le curseur ?

Si vous avez une version de XEmacs antérieure à 19.14, non. Sinon, vous pouvez faire ce qui suit :

(blink-cursor-mode)

Cette fonction commute entre un curseur fixe et clignotant. Vous pouvez aussi configurer ce mode à partir du menu en choisissant `Options => Frame Appearance => Blinking Cursor'. Pensez à sauvegarder les options.

Comment désactiver le collage avec la souris ?

J'ai gardé appuyé le bouton du milieu de la souris par accident et j'ai récupéré des choses qui se sont collées dans mon tampon. Comment puis désactiver cela ?

Voici une liaison où le bouton du milieu sélectionne (mais ne coupe pas) l'expression sous la souris. Cliquer avec sur une parenthèse ouvrante ou fermante sélectionnera celle qui lui correspond. Notez que vous pouvez utiliser define-key ou global-set-key.

(defun mouse-set-point-and-select (event)
  "Place le point a l'emplacement de la souris, puis marque la forme suivante"
  (interactive "@e")
  (mouse-set-point event)
  (mark-sexp 1))
(define-key global-map [button2] 'mouse-set-point-and-select)

Comment configurer les modificateurs control/meta/etc pour les boutons de la souris ?

Utilisez, par exemple, [(meta button1)]. Voici une configuration pour les programmeurs en Common Lisp qui utilise le paquetage ilisp de la distribution et où meta-button1 sur un nom de fonction trouvera le fichier où cette fonction est définie et vous placera à cet endroit dans le fichier source.

(local-set-key [(meta button1)] 'edit-definitions-lisp)

Cliquer le bouton gauche ne fait rien dans la liste des tampons

Je fais C-x C-b pour avoir une liste des tampons et les entrées sont mises en évidence lorsque la souris passe dessus mais cliquer avec le bouton gauche ne fait rien.

Utilisez le bouton du milieu.

Comment avoir la liste des tampons avec le bouton 3 de la souris ?

Le code suivant remplacera le popup par défaut du bouton 3 :

(global-set-key [button3] 'popup-buffer-menu)

Pourquoi le couper-coller ne fonctionne pas entre XEmacs et un cmdtool ?

Nous ne le savons pas. C'est un bug. Il semble quand même qu'on puisse le contourner. Essayez de lancez d'abord xclipboard, cela règle le problème même si vous en sortez (ceci sera réglé avec la version 19.13, mais nous n'avons pas encore vérifié ça).

Comment faire pour que XEmacs colle à la position du curseur texte ?

Par défaut, XEmacs colle les sélections X à l'emplacement où se trouve le pointeur de la souris. Comment puis-je désactiver cela ?

Examinez la fonction mouse-yank, en tapant C-h f mouse-yank RET.

Pour que XEmacs colle à l'endroit du curseur texte, ajoutez ceci à votre `.emacs':

(setq mouse-yank-at-point t)

À partir de XEmacs-20.3 vous pouvez aussi modifier cela avec Customize. Choisissez Customize->Emacs->Editing->Mouse->Yank At Point... à partir du menu Options, ou tapez M-x customize RET mouse RET.

Comment sélectionner une région rectangulaire ?

Sélectionnez la région normalement, puis utilisez les commandes rectangle (kill-rectangle, par exemple) dessus. La région n'est pas mise en évidence comme rectangle mais les commandes fonctionnent correctement.

Pour vraiment balayer les régions rectangulaires avec la souris, vous pouvez utiliser mouse-track-do-rectangle qui est assignée à M-button1. Puis utilisez les commandes rectangle.

Vous pouvez aussi faire ce qui suit pour modifier le comportement par défaut pour balayer les régions rectangulaires :

(setq mouse-track-rectangle-p t)

À partir de XEmacs-20.3 vous pouvez aussi modifier cela avec Customize. Choisissez Customize->Emacs->Editing->Mouse->Track Rectangle... à partir du menu Options, ou tapez M-x customize RET mouse RET.

 mouse-track-do-rectangle: (event)
   -- an interactive compiled Lisp function.
 Like `mouse-track' but selects rectangles instead of regions.

Pourquoi M-w met tant de temps ?

Il ne le fait pas. Il laisse la région visible pendant une seconde pour que vous puissiez voir quelle zone est copiée. Si vous commencez à travailler, il terminera immédiatement sa tâche. En d'autres termes, il ne met une seconde que si vous le laissez faire.

Comment se débarrasser du menu (ou de la barre de menu) ?

Si vous disposez de XEmacs 19.13 et antérieurs, ajoutez cette commande à votre `.emacs'.

(set-menubar nil)

À partir de XEmacs 19.14, la méthode à privilégier est :

(set-specifier menubar-visible-p nil)

Puis-je personnaliser la barre de menu de base ?

Pour une barre de menu étendue, ajoutez cette ligne à votre `.emacs' :

(load "big-menubar")

Si vous voulez créer votre propre barre de menu, ce fichier offre un ensemble d'exemples de base utilisables par tous. Le fichier se trouve dans `lisp/packages/big-menubar.el', dans le répertoire d'installation de XEmacs.

Comment contrôler le nombre de tampons listés dans le menu Buffers List ?

Ajoutez ce qui suit à votre `.emacs' (adaptez à vos besoins) :

(setq buffers-menu-max-size 20)

Pour ne pas avoir de limite, utilisez un argument `nil'.

À partir de XEmacs-20.3 vous pouvez aussi modifier cela avec Customize. Choisissez Customize->Emacs->Environment->Menu->Buffers Menu->Max Size... à partir du menu Options, ou tapez M-x customize RET buffers-menu RET.

Les ressources comme Emacs*menubar*font ne fonctionnent pas ?

J'essaie d'utiliser une ressource comme Emacs*menubar*font pour configurer la fonte de la barre de menu, mais cela ne marche pas.

Si vous utilisez la vrai barre de menu Motif, cette ressource n'est pas reconnue ; vous devez dire :

Emacs*menubar*fontList: FONT

Si vous utilisez la barre de menu Lucid, la première ressource ne sera reconnue que si la dernière ressource n'est pas configurée. Ceci signifie que la ressource

*fontList: FONT

surchargera

Emacs*menubar*font: FONT

bien que la dernière soit plus spécifique.

Comment lier une touche à une fonction pour commuter la barre d'outils ?

Essayez quelque chose comme :

(defun my-toggle-toolbar ()
  (interactive)
  (set-specifier default-toolbar-visible-p
                 (not (specifier-instance default-toolbar-visible-p))))
(global-set-key "\C-xT" 'my-toggle-toolbar)

Il y a des bugs de réaffichage dans la version 19.14 qui peut faire que ce qui précède donne un affichage embrouillé, notamment pour les cadres ayant plusieurs fenêtres. Vous pouvez devoir redimensionner le cadre avant que XEmacs ne réalise que la barre de menu soit vraiment partie.

Merci à Martin Buchholz <Martin.Buchholz@sun.com> pour le code correct.

Comment désactiver la barre de défilement ?

Pour les désactiver dans tous les cadres, ajoutez la ligne suivante à votre `.Xdefaults' :

Emacs.scrollBarWidth:  0

Ou choisissez Frame Appearance->Scrollbars à partir du menu Options. Pensez à sauver les options.

Pour désactiver la barre de défilement cadre par cadre, utilisez la fonction suivante :

(set-specifier scrollbar-width 0 (selected-frame))

Vous pouvez, en fait, activer les barres de défilement à n'importe quel niveau en le substituant au (selected-frame) de la commande ci-dessus. Par exemple, pour les désactiver seulement dans un tampon unique :

(set-specifier scrollbar-width 0 (current-buffer))

Dans les versions de XEmacs antérieures à 19.14, vous deviez utiliser la construction un peu plus tirée par les cheveux :

(set-specifier scrollbar-width (cons (selected-frame) 0))

Comment utiliser les ressources pour changer les couleurs de la barre de défilement ?

Voici un récapitulatif de la façon d'utiliser les ressources pour changer les couleurs de votre barre de défilement :

! Motif scrollbars

Emacs*XmScrollBar.Background: skyblue
Emacs*XmScrollBar.troughColor: lightgray

! Athena scrollbars

Emacs*Scrollbar.Foreground: skyblue
Emacs*Scrollbar.Background: lightgray

Remarquez la majuscule de Scrollbar pour le widget Athena.

Déplacer la barre de défilement peut déplacer le point ; comment désactiver cela ?

Lorsque je me sert de la barre de défilement dans une fenêtre XEmacs, cela déplace aussi le point, ce qui ne devrait pas être le comportement par défaut. Est-ce un bug ? Puis-je désactiver ça ?

Ce comportement est normal, ce n'est pas un bug. Le point reste à la même position dans le tampon tant que la position ne sort pas de l'écran. Dans ce cas, le point ira soit dans le coin supérieur gauche, soit dans le coin inférieur gauche.

Cela ne peut être modifié.

Comment avoir un défilement horizontal automatique ?

Par la même occasion, comment puis-je le désactiver dans des modes spécifiques ?

Ajouter à vote fichier `.emacs' :

(require 'auto-show)

Puis, faites (setq truncate-lines t) dans les hooks des modes pour lesquels vous voulez des lignes tronquées.

Plus précisément : Si truncate-lines est à nil, les barres de défilement horizontales n'apparaitront jamais. Sinon, elles n'apparaîtront que si la valeur de scrollbar-height pour ce tampon/fenêtre/etc n'est pas nulle. Si vous faites :

(set-specifier scrollbar-height 0)

les barres de défilement horizontales n'apparaitront pas dans les tampons tronqués sauf si le paquetage les demande explicitement.

À partir de la version 19.14, le défilement horizontal automatique est en standard.

Comment désactiver ou modifier les sélections mises en évidence ?

Le mode zmacs permet ce que l'on pourrait appeler une mise en évidence gratuite des régions sélectionnées (en configurant la marque, ou en utilisant la souris). C'est le comportement par défaut. Pour le désactiver, ajoutez la ligne suivante à votre fichier `.emacs' :

(setq zmacs-regions nil)

À partir de XEmacs-20.2 vous pouvez aussi utiliser Customize. Choisissez Customize->Emacs->Editing->Basics->Zmacs Regions à partir du menu Options, ou faites M-x customize RET editing-basics RET.

Pour modifier l'aspect de la sélection, faites Options->Customize à partir de la barre de menu.

Comment faire pour que taper dans une région active la supprime ?

Je veux faire en sorte que si je sélectionne du texte et que je commence à taper, le texte tapé remplace le texte sélectionné, comme avec Motif.

Vous voulez utiliser quelque chose appelé pending delete. Le pending delete est ce qui arrive lorsque vous sélectionnez une région (avec la souris ou le clavier) et que vous pressez une touche pour remplacer la région sélectionnée par la touche tapée. Habituellement, Backspace détruit la région sélectionnée.

Pour obtenir ce comportement, ajoutez la ligne suivante à votre `.emacs' :

(turn-on-pending-delete)

Notez que ceci fonctionne avec Backspace et Delete.

Puis-je désactiver la mise en évidence pendant isearch ?

Je n'aime pas que mon texte soit mis en évidence lorsque je fais une recherche incrémentale car je ne peux pas voir ce qu'il y a en dessous. Comme désactiver ça ?

Placez ce qui suit dans votre `.emacs':

(setq isearch-highlight nil)

À partir de XEmacs-20.2, vous pouvez aussi utiliser Customize. Tapez M-x customize-variable RET isearch-highlight RET.

Notez aussi qu'isearch-highlight affecte query-replace et ispell. Au lieu de désactiver isearch-highlight, une meilleure solution est peut-être de personnaliser l'aspect d'isearch.

Comment désactiver la mise en évidence après C-x C-p (mark-page) ?

Mettez ceci dans votre .emacs :

(setq zmacs-regions nil)

Attention : cette commande désactive toutes les mises en évidences de région

Voir aussi See section Comment désactiver ou modifier les sélections mises en évidence ?.

La région disparaît lorsque j'atteind la fin du tampon lors d'un défilement

Comment désactiver cette caractéristique (car, bien sûr, c'en est une et non un bug) ?

Comme ceci :

(defadvice scroll-up (around scroll-up freeze)
  (interactive "_P")
  (let ((zmacs-region-stays t))
    (if (interactive-p)
	(condition-case nil
	    ad-do-it
	  (end-of-buffer (goto-char (point-max))))
      ad-do-it)))

(defadvice scroll-down (around scroll-down freeze)
  (interactive "_P")
  (let ((zmacs-region-stays t))
    (if (interactive-p)
	(condition-case nil
	    ad-do-it
	  (beginning-of-buffer (goto-char (point-min))))
      ad-do-it)))

Merci à T. V. Raman <raman@adobe.com> pour son aide dans l'élaboration de cette réponse.


Go to the first, previous, next, last section, table of contents.