Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

navigation dans un grand paragraphe

13 réponses
Avatar
JH
Bonjour,


Je cherche à obtenir un comportement "style gedit/kedit/notepad" dans la
navigation avec les flèches du clavier dans emacs.

Pour l'instant, emacs passe d'une ligne à l'autre avec l'utilisation de
la "flèche du bas" du clavier.
Or, quand une ligne est très longue, pour aller au milieu de celle-ci,
il faut soit reprendre sa souris, soit déplacer son curseur à gauche (ou
droite) avant d'arriver au milieu :)...

Y'a t il un moyen de configurer cela ?

Cordialement,

JH

10 réponses

1 2
Avatar
Bruno.L
JH wrote:
Bonjour,

Or, quand une ligne est très longue, pour aller au milieu de celle-ci,
il faut soit reprendre sa souris, soit déplacer son curseur à gauche (ou
droite) avant d'arriver au milieu :)...



ou alors ALT-F et ALT-B pour sauter les mots



--
Bruno <http://bluesilk.be>
Avatar
Sébastien Kirche
Le 31 May 2005, JH a dit :

Bonjour,



Bonjour,

Je cherche à obtenir un comportement "style gedit/kedit/notepad" dans
la navigation avec les flèches du clavier dans emacs.

Pour l'instant, emacs passe d'une ligne à l'autre avec l'utilisation
de la "flèche du bas" du clavier. Or, quand une ligne est très longue,
pour aller au milieu de celle-ci, il faut soit reprendre sa souris,
soit déplacer son curseur à gauche (ou droite) avant d'arriver au
milieu :)...



Normal, il va sur la prochaine ligne du fichier, et ne tient pas compte
du fait que celle-ci peut être wrappée sur plusieurs lignes à l'écran en
fonction des options d'affichage.

Y'a t il un moyen de configurer cela ?



Moi je m'étais bricolé ceci avec l'aide du groupe. Ça peut sans doute
s'améliorer, mais ça marche :)

Il suffit d'un (require 'screen-lines2) et S-up S-down permet de se
déplacer d'une ligne d'écran à l'autre.

8<------8<------8<------8<------8<------8<------8<------8<------8<------
;; screen-lines2.el
;; --------------
;; (Merci à Olve de fr.comp.applications.emacs)
;;
;; Permet de se déplacer entre les «lignes écran» d'une ligne wrappée
;; Attention à utiliser une police à chasse fixe.
;;
;; Déplacement : S-up monte
;; S-down descend

(defsubst line-length nil
(- (line-end-position) (line-beginning-position)))

(defun on-last-displayed-segment-p (cc)
"When a long line is displayed, there appear
lines on the screen which we call segment.
This function answer t if point is on last segment,
nil otherwise."
(let ((nb-segments (ceiling (/ (line-length) 1.0 (window-width))))
(number (ceiling (/ cc 1.0 (window-width)))))
(= number nb-segments)))

(defun previous-last-segment-length nil
"Answer is the length of the last segment of
previous line. See `on-last-displayed-segment-p'
for the definition of a segment."
(save-excursion
(if (zerop (forward-line -1))
(% (line-length) (window-width))
0)))

(defun immediately-after-a-long-line-p nil
"t if point is on a line following a line longer than
window-width, nil otherwise."
(save-excursion
(and (zerop (forward-line -1))
(> (line-length) (window-width)))))

(defun vertical-temporary-goal-column (cc)
(if temporary-goal-column
(+ (* (floor (/ cc 1.0 (window-width))) (window-width))
(% temporary-goal-column (window-width)))
(current-column)))

(defun vertical-single-step-down (cc diff)
"CC is fictive-current-column according to
temporary-goal-column. DIFF is what it
differs from current-column."
(if (< (line-length)
(+ cc (window-width)))
(if (on-last-displayed-segment-p (- cc diff))
;; We change of line:
(next-line 1)
(end-of-line))
(forward-char (- (window-width) diff))))

(defun vertical-single-step-up (cc diff)
"CC is fictive-current-column according to
temporary-goal-column. DIFF is what it
differs from current-column."
(if (< cc (window-width))
;; We are on the first segment.
(if (immediately-after-a-long-line-p)
(let ((pl (- cc (previous-last-segment-length))))
(beginning-of-line)
(forward-char -1)
(when (< pl 0) (forward-char pl)))
(previous-line 1))
(backward-char (- (window-width) diff))))

;; shift up/down a line >on screen<
(defun next-screen-line (arg)
(interactive "p")
(if (< arg 0) (previous-screen-line (- arg))
(unless arg (setq arg 1))
(unless (member last-command '(next-line previous-line))
(setq temporary-goal-column (% (current-column) (window-width))))
(let*((ccp (current-column))
(cc (vertical-temporary-goal-column ccp)))
(while (> arg 0)
(vertical-single-step-down cc (- cc ccp))
(setq arg (- arg 1)))
(setq this-command 'next-line))))

(defun previous-screen-line (arg)
(interactive "p")
(if (< arg 0) (next-screen-line (- arg))
(unless arg (setq arg 1))
(unless (member last-command '(next-line previous-line))
(setq temporary-goal-column (% (current-column) (window-width))))
(let*((ccp (current-column))
(cc (vertical-temporary-goal-column ccp)))
(while (> arg 0)
(vertical-single-step-up cc (- cc ccp))
(setq arg (- arg 1)))
(setq this-command 'previous-line))))

(global-set-key [S-down] 'next-screen-line)
(global-set-key [S-up] 'previous-screen-line)

(provide 'screen-lines2)
8<------8<------8<------8<------8<------8<------8<------8<------8<------

Hopant que ça helpe.
--
Sébastien Kirche
Avatar
JH


Moi je m'étais bricolé ceci avec l'aide du groupe. Ça peut sans doute
s'améliorer, mais ça marche :)

Il suffit d'un (require 'screen-lines2) et S-up S-down permet de se
déplacer d'une ligne d'écran à l'autre.

8<------8<------8<------8<------8<------8<------8<------8<------8<------



....

8<------8<------8<------8<------8<------8<------8<------8<------8<------

Hopant que ça helpe.



Bonjour et merci

j'ai un joli :

Invalid (FSF Emacs) key format (see doc of define-key): S-down

gaaa? que faire ?

Cordialement,

JH
Avatar
Olivier
Invalid (FSF Emacs) key format (see doc of define-key): S-down

gaaa? que faire ?



Le remplacer par (shift down).
JQCA, O.
Avatar
Sébastien Kirche
Le 31 May 2005, Olivier a dit :

> Invalid (FSF Emacs) key format (see doc of define-key): S-down
> gaaa? que faire ?

Le remplacer par (shift down).



Tiens ? Bizarre, je n'ai jamais eu ce problème.

Je viens de vérifier que ça marchait encore. C'est ok sur un texte
classique, par contre je viens de voir que ça déconne si le texte
contient des caractère échappés du style 225216 : le curseur saute.

Ça peut se voir en ouvrant un fichier dans un mauvais encodage du style
un fichier mac-roman ouvert en latin-9...

--
Sébastien Kirche
Avatar
Olivier
Tiens ? Bizarre, je n'ai jamais eu ce problème.



Moi non plus, mais la definition des touches va de plus
en plus vers cette version qui est notoirent preferee
par :-(-xemacs. Il peut y avoir des applications recentes
qui ne supportent plus la bonne vieille syntaxe (qui
a pourtant survecue a la migration 19.3 -> 20 !!), c'est
juste un coup dans l'eau :-), longtemps que je n'ai pas
programme en elisp.

Je viens de vérifier que ça marchait encore. C'est ok sur un texte
classique, par contre je viens de voir que ça déconne si le texte
contient des caractère échappés du style 225216 : le curseur saute.



Quoi n'en y a marcher encore ? Le script ou la definition de
la touche ? Aucune raison que le curseur saute si l'encodage est
correct et a chasse fixe. Oui, la j'ai quand meme ete un peu
leger, il faudrait inclure la largeur des caracteres, d'autant que
ca intervient de plus en plus, ya qu'a utiliser un peu de preview-latex
ou une police un peu jolie.

Amities,
Olivier
Avatar
Ralf Angeli
* Olivier (2005-05-31) writes:

Tiens ? Bizarre, je n'ai jamais eu ce problème.



Moi non plus, mais la definition des touches va de plus
en plus vers cette version qui est notoirent preferee
par :-(-xemacs. Il peut y avoir des applications recentes
qui ne supportent plus la bonne vieille syntaxe (qui
a pourtant survecue a la migration 19.3 -> 20 !!), c'est
juste un coup dans l'eau :-), longtemps que je n'ai pas
programme en elisp.



`(kbd "S-down")' marche avec GNU Emacs et XEmacs.

--
Ralf
Avatar
Matthieu Moy
JH writes:

Invalid (FSF Emacs) key format (see doc of define-key): S-down

gaaa? que faire ?



Dire aux développeurs de XEmacs que l'Emacs qu'ils ont forké ne
s'appelle pas « FSF Emacs », mais « GNU Emacs » ?

--
Matthieu
Avatar
JH
Olivier wrote:
Invalid (FSF Emacs) key format (see doc of define-key): S-down

gaaa? que faire ?




Le remplacer par (shift down).
JQCA, O.



Bonjour,

c'est ce que j'ai fait, mais le comportement de la touche "down" n'est
pas modifiée, et celui de la touche "shift+down" affiche :
"Symbol's function definition is void: line-end-position"

..?

Cordialement,

JH
Avatar
drkm
JH writes:

Olivier wrote:

Le remplacer par (shift down).



c'est ce que j'ai fait, mais le comportement de la touche "down" n'est
pas modifiée, et celui de la touche "shift+down" affiche :
"Symbol's function definition is void: line-end-position"



Si tu utilises (shift down), il est normal que ça ne modifie
pas la touche down. Pour le 'end-line-position', elle est
définie sur mon GNU Emacs 21.3.50, mais tu utilises XEmacs, si je
me souviens bien.

Que donne 'C-h f end-line-position' ? J'imagine qu'elle
n'existe pas.

--drkm
1 2