Block markieren mit ^K, B und K - geht nicht
-
- Beiträge: 244
- Registriert: Do 21. Jan 2010, 22:33
- OS, Lazarus, FPC: Windows Vista (L 0.9.31 FPC 2.5.1)
- CPU-Target: 32Bit
- Wohnort: z.z. Brasilien, sonst 82335 Berg-Leoni (südlich von München)
Block markieren mit ^K, B und K - geht nicht
Hallo, ich habe wieder ein kleines Problem.
Ich wollte (wie in Turbo Pascal) mit ^K,B und ^K,K einen Block im Quelleditor markieren. Aber das geht nicht. ^K,H (=BlockToggleHide) ändert da auch nichts.
Und mit ^Q, (^)B und (^)K kann man auch nicht zu Anfang und Ende dieses Blocks springen.
^Q, B und K bewirken einen Sprung zu Beginn und Ende des jeweiligen Quellcode-Blocks, unabhängig von den Vorgaben in ^K, b und K.
Und ^Q, ^B und ^K bewirken gar nichts...
Und mit ^K,C oder V läßt sich der Block auch nicht kopieren bzw verschieben. Das geht nur mit Blocks, die ich "von Hand" (Shift + Cursor bzw Maus ziehen) erstellt habe.
(Besser wäre ja eh, ^x, ^c, ^v zu verwenden, weil beim Springen an einen anderen Punkt der Bereich gelöscht wird).
(Dasselbe war schon in Lazarus 0.9.31 der Fall, jetzt noch immer in 1.1).
Da muß wohl irgendwo ein Bug sein.
Ich wollte das nämlich in einen Makro einbauen: Wort suchen, zum Beginn des Wortes springen, dort Blockbeginn setzen. Anderes Wort suchen, dort am Ende Blockende setzen, markieren, zum Ursprung zurückspringen, Block einfügen. Läßt sich nicht realisieren.
Der Grund für dieses Makro war, daß ich bisweilen beim Compilieren einer Unit, in der beim Implementationsteil nur der Prozedur/Funktions-Kopf angegeben ist (bei externen Routinen, mit Verweis auf eine .dll-Datei), dann geht das manchmal reibungslos, andere Male heißt es immer, Parameter müssen mit dem Kopf übereinstimmen.
Gibt es da einen Compilerschalter, der dieses Verhalten beeinflußt?
Herzlchen Dank
P. Nikolaus
ich benütze Lazarus 1.1 - FPC 2.71, Windows 7
Ich wollte (wie in Turbo Pascal) mit ^K,B und ^K,K einen Block im Quelleditor markieren. Aber das geht nicht. ^K,H (=BlockToggleHide) ändert da auch nichts.
Und mit ^Q, (^)B und (^)K kann man auch nicht zu Anfang und Ende dieses Blocks springen.
^Q, B und K bewirken einen Sprung zu Beginn und Ende des jeweiligen Quellcode-Blocks, unabhängig von den Vorgaben in ^K, b und K.
Und ^Q, ^B und ^K bewirken gar nichts...
Und mit ^K,C oder V läßt sich der Block auch nicht kopieren bzw verschieben. Das geht nur mit Blocks, die ich "von Hand" (Shift + Cursor bzw Maus ziehen) erstellt habe.
(Besser wäre ja eh, ^x, ^c, ^v zu verwenden, weil beim Springen an einen anderen Punkt der Bereich gelöscht wird).
(Dasselbe war schon in Lazarus 0.9.31 der Fall, jetzt noch immer in 1.1).
Da muß wohl irgendwo ein Bug sein.
Ich wollte das nämlich in einen Makro einbauen: Wort suchen, zum Beginn des Wortes springen, dort Blockbeginn setzen. Anderes Wort suchen, dort am Ende Blockende setzen, markieren, zum Ursprung zurückspringen, Block einfügen. Läßt sich nicht realisieren.
Der Grund für dieses Makro war, daß ich bisweilen beim Compilieren einer Unit, in der beim Implementationsteil nur der Prozedur/Funktions-Kopf angegeben ist (bei externen Routinen, mit Verweis auf eine .dll-Datei), dann geht das manchmal reibungslos, andere Male heißt es immer, Parameter müssen mit dem Kopf übereinstimmen.
Gibt es da einen Compilerschalter, der dieses Verhalten beeinflußt?
Herzlchen Dank
P. Nikolaus
ich benütze Lazarus 1.1 - FPC 2.71, Windows 7
-
- Beiträge: 588
- Registriert: Mi 25. Mär 2009, 21:12
- OS, Lazarus, FPC: Laz trunk / fpc latest release / Win and other
- CPU-Target: mostly 32 bit
Re: Block markieren mit ^K, B und K - geht nicht
Geht schon (oder sollte).
ABER nur mit "persistent block" (Options / editor / general > am unteren Ende der Seite)
ABER nur mit "persistent block" (Options / editor / general > am unteren Ende der Seite)
-
- Beiträge: 244
- Registriert: Do 21. Jan 2010, 22:33
- OS, Lazarus, FPC: Windows Vista (L 0.9.31 FPC 2.5.1)
- CPU-Target: 32Bit
- Wohnort: z.z. Brasilien, sonst 82335 Berg-Leoni (südlich von München)
Re: Block markieren mit ^K, B und K - geht nicht
Code: Alles auswählen
Geht schon (oder sollte).
ABER nur mit "persistent block" (Options / editor / general > am unteren Ende der Seite)
Aber das zweite Problem: welche Compilerschalter o.a., daß im implementation-Teil auch nur
funtion myproc; external ....
angenommen wird, ohne den ganzen Funktionskopf (mit Variablen, Funktionsergebnis) zu wiederholen,
weiß da jemand Bescheid?
Herzichen Dank.
-
- Beiträge: 244
- Registriert: Do 21. Jan 2010, 22:33
- OS, Lazarus, FPC: Windows Vista (L 0.9.31 FPC 2.5.1)
- CPU-Target: 32Bit
- Wohnort: z.z. Brasilien, sonst 82335 Berg-Leoni (südlich von München)
Re: Block markieren mit ^K, B und K - geht nicht
Ich muß doch meine Antwort etwas präzisieren:
Block markieren mit ^K und dann (^)B bzw (^)K, und dann auch springen zu Anfang und Ende mit ^Q,^B bzw, ^Q,^K das geht jetzt. Aber wenn ich dann den Block durch Sprung auf zB eine SprungMarke (^Q,<Nr>) erweitern will, dann wird der Block wieder aufgehoben und ich kann ihn nicht erweitern.
Ich dachte erst, dazu den Finde/Ersetze - Dialog um eine Option "Extended" zu erweitern, aber da muß man zuviele Änderungen vornehmen (Option ssoExtended in TSynSearchOptions hinzufügen, eine neue GroupBox ExtendedGroupBox und zwei neue RadioButtons NormalRadioButton und ExtendedRadioButton in TlazFindReplaceDialog einfügen und entsorechend in der lfm-Datei und in den relevanten Prozeduren...
Außerdem ergäbe sich dann wohl das Problem, daß bei jeder Wiederholung (^L) derselbe Vorgang wiederholt wird. Das muß dann auch verhindert werden.
Aber vielleicht könnte man mit Shift + Ctrl + Q , <Nr> den Block zu dieser Marke hin erweitern? Das dürfte nicht schwer zu programmieren sein...
Herzlichen Dank.
Block markieren mit ^K und dann (^)B bzw (^)K, und dann auch springen zu Anfang und Ende mit ^Q,^B bzw, ^Q,^K das geht jetzt. Aber wenn ich dann den Block durch Sprung auf zB eine SprungMarke (^Q,<Nr>) erweitern will, dann wird der Block wieder aufgehoben und ich kann ihn nicht erweitern.
Ich dachte erst, dazu den Finde/Ersetze - Dialog um eine Option "Extended" zu erweitern, aber da muß man zuviele Änderungen vornehmen (Option ssoExtended in TSynSearchOptions hinzufügen, eine neue GroupBox ExtendedGroupBox und zwei neue RadioButtons NormalRadioButton und ExtendedRadioButton in TlazFindReplaceDialog einfügen und entsorechend in der lfm-Datei und in den relevanten Prozeduren...
Außerdem ergäbe sich dann wohl das Problem, daß bei jeder Wiederholung (^L) derselbe Vorgang wiederholt wird. Das muß dann auch verhindert werden.
Aber vielleicht könnte man mit Shift + Ctrl + Q , <Nr> den Block zu dieser Marke hin erweitern? Das dürfte nicht schwer zu programmieren sein...
Herzlichen Dank.
-
- Beiträge: 588
- Registriert: Mi 25. Mär 2009, 21:12
- OS, Lazarus, FPC: Laz trunk / fpc latest release / Win and other
- CPU-Target: mostly 32 bit
Re: Block markieren mit ^K, B und K - geht nicht
1) Sprung zu einer Markierung, sollte einen persistenten block nicht aufheben. Tut es aber.
Das ist also ein bug.
2) Man koennte eine Art Feststell-function machen. Also ctrl-b start selection process (none persistent), Dann mueste man die shift Taste nicht halten, und alle caret Bewegungen würden den normalen Block erweitern.... bis zum naechsten ctrl-b (oder auch 2 verschiedene codes)
Im Moment aber nicht top priority...
Das ist also ein bug.
2) Man koennte eine Art Feststell-function machen. Also ctrl-b start selection process (none persistent), Dann mueste man die shift Taste nicht halten, und alle caret Bewegungen würden den normalen Block erweitern.... bis zum naechsten ctrl-b (oder auch 2 verschiedene codes)
Im Moment aber nicht top priority...
-
- Beiträge: 588
- Registriert: Mi 25. Mär 2009, 21:12
- OS, Lazarus, FPC: Laz trunk / fpc latest release / Win and other
- CPU-Target: mostly 32 bit
Re: Block markieren mit ^K, B und K - geht nicht
Ersteres ist in r 37453 behoben
Re: Block markieren mit ^K, B und K - geht nicht
Persistente Blöcke habe ich aufgegeben. Es funktioniert leider nicht so wie in Turbo Pascal. Der größte Nachteil ist, dass bei persistenten Blöcken die Suche mit Ctrl+F immer einen eventuell markierten Block als Vorgabe nimmt. Damit ist das Ganze unbrauchbar.
-
- Beiträge: 588
- Registriert: Mi 25. Mär 2009, 21:12
- OS, Lazarus, FPC: Laz trunk / fpc latest release / Win and other
- CPU-Target: mostly 32 bit
Re: Block markieren mit ^K, B und K - geht nicht
Das ist bei nicht persistent Block so. In beiden Faellen gilt der Block als Default, ausser wenn er mehrzeilig ist.
-
- Beiträge: 244
- Registriert: Do 21. Jan 2010, 22:33
- OS, Lazarus, FPC: Windows Vista (L 0.9.31 FPC 2.5.1)
- CPU-Target: 32Bit
- Wohnort: z.z. Brasilien, sonst 82335 Berg-Leoni (südlich von München)
Re: Block markieren mit ^K, B und K - geht nicht
Jezt funktioniert es gut. Mir ist es sogar gelungen, diese Funktion (mit persistentem Block) in eine ältere Fassung von Lazarus 1.1 (vom 21.4., mit Rev 36953, wie sie von CodeTyphon benutzt wird) zu übertragen.
(Inzwischen gibt es schon eine neue Fassung vom 26. Mai, aber noch mit Rev 47429, da wird das wohl auch noch nicht gehen. Werd es dann wieder übertragen...)
Aber es gibt doch noch einen kleinen Schönheitsfehler:
Wenn ich einen (mehrzeiligen) Block markiert habe und dann das Wort unter dem Cursor mit ^F suchen lassen will, dann erscheint dieses zwar im Such-Fenster, aber es kommt die Meldung: <Wort> nicht gefunden.
Obwohl es dann mit ^L ohne weiteres angesprungen werden kann.
Und ob das wirklich sinnvoll ist, daß wenn ein markierter einzeiiger Block existert, daß dann dieser gleich als Suchwort genommen wird, auch wenn man das Wort unter dem Cursor suchen will?
Vielleicht wäre es gut, dafür auch eine Option in Einstellungen-Editor-Allgemein zu machen...
(Inzwischen gibt es schon eine neue Fassung vom 26. Mai, aber noch mit Rev 47429, da wird das wohl auch noch nicht gehen. Werd es dann wieder übertragen...)
Aber es gibt doch noch einen kleinen Schönheitsfehler:
Wenn ich einen (mehrzeiligen) Block markiert habe und dann das Wort unter dem Cursor mit ^F suchen lassen will, dann erscheint dieses zwar im Such-Fenster, aber es kommt die Meldung: <Wort> nicht gefunden.
Obwohl es dann mit ^L ohne weiteres angesprungen werden kann.
Und ob das wirklich sinnvoll ist, daß wenn ein markierter einzeiiger Block existert, daß dann dieser gleich als Suchwort genommen wird, auch wenn man das Wort unter dem Cursor suchen will?
Vielleicht wäre es gut, dafür auch eine Option in Einstellungen-Editor-Allgemein zu machen...
-
- Beiträge: 588
- Registriert: Mi 25. Mär 2009, 21:12
- OS, Lazarus, FPC: Laz trunk / fpc latest release / Win and other
- CPU-Target: mostly 32 bit
Re: Block markieren mit ^K, B und K - geht nicht
Wenn ein Block ausgewaehlt ist, dann ist das default "scope" fuer die suche, innerhalb des markierten Bereich. Existiert das zu suchende Wort in diesem Bereich?
Oder das Scope wieder auf "Global" setzen
Oder das Scope wieder auf "Global" setzen
-
- Beiträge: 244
- Registriert: Do 21. Jan 2010, 22:33
- OS, Lazarus, FPC: Windows Vista (L 0.9.31 FPC 2.5.1)
- CPU-Target: 32Bit
- Wohnort: z.z. Brasilien, sonst 82335 Berg-Leoni (südlich von München)
Re: Block markieren mit ^K, B und K - geht nicht
Nein, es geht ja um das Wort unter dem Cursor, der ausgewählte Block kann vorher oder nachher sein.martin_frb hat geschrieben:Wenn ein Block ausgewaehlt ist, dann ist das default "scope" fuer die suche, innerhalb des markierten Bereich. Existiert das zu suchende Wort in diesem Bereich?
Ich denke, es wäre sinnvoller, in diesem Fall als Default-Suche nicht den "ausgewählten Text" zu nehmen, sondern "Global". Wenn man will, kann ja immer noch "ausgewählten Text" aktivieren.
Übrigens habe ich eine Möglichkeit für Makros-Editieren (daß man zumindest Makros speichern und bearbeiten und laden kann).
Ich denke es mir so:
Die ShortCuts werden ja eh schon intern in einer Liste gespeichert (Type word bzw TIDEMacro oder so ähnlich).
Man definiert
Code: Alles auswählen
type MacroItem = record macroNr:word; macroName:string; end;
type TMacrItemList = class(TList); //Liste der MacroItem, vielleicht einfacher array of Macroitem?
Diese Haupt-MakroDatei kann man (mit Shift^R,E) editieren (sie enthält die Liste der MacoItems in der Reihenfolge, wie sie beim Abspielen gelesen werden), mit anderem Namen abspeichern (*.mak), nach Macro.mak kopieren, an andere Makrodatei anhängen, löschen etc.
Sobald diese Datai Macro.mak geändert wurde, werden automatisch die entsprechenden ShortCuts daraus gelesen und wieder intern gespeichert (wie sie bisher am Ende des Recording gespeichert sind).
So kann man bestimmte längere Makros, die man öfter braucht, unter einem passenden Namen abspeichern und bei Bedarf nach Macro.mak kopieren.
Zum Editieren dann noch ein MakroEditFenster,
- einerseits mit einer Liste der erstellten MakroDateien, durch Anklicken einer Datei wird sie zum Hauptmakro, mit Del löschen, die Datei Macro.mak selbet wird bei jedem neuen Recording wieder überschrieben,
- andererseits mit einer Editiermöglichkeit der Makroliste einer Datei (hinzufügen, löschen, verschieben von MacroItems).
Wäre das nicht etwas? Ich denke, das dürfte nicht allzu schwer zu implementieren sein.
-
- Beiträge: 588
- Registriert: Mi 25. Mär 2009, 21:12
- OS, Lazarus, FPC: Laz trunk / fpc latest release / Win and other
- CPU-Target: mostly 32 bit
Re: Block markieren mit ^K, B und K - geht nicht
"Nein" was?br_klaus hat geschrieben:Nein, es geht ja um das Wort unter dem Cursor, der ausgewählte Block kann vorher oder nachher sein.martin_frb hat geschrieben:Wenn ein Block ausgewaehlt ist, dann ist das default "scope" fuer die suche, innerhalb des markierten Bereich. Existiert das zu suchende Wort in diesem Bereich?
Nein: Du hast den Scope auf Auswahl belassen?
Nein: Du hast etwas anderes gemeint?
Geht es wenn Du den Scope aenderst? (Es geht bei mir)
Reine Geschmackssache....Ich denke, es wäre sinnvoller, in diesem Fall als Default-Suche nicht den "ausgewählten Text" zu nehmen, sondern "Global". Wenn man will, kann ja immer noch "ausgewählten Text" aktivieren.
Die IDE speichert wenn beim beenden. Nicht jedes mal....Übrigens habe ich eine Möglichkeit für Makros-Editieren (daß man zumindest Makros speichern und bearbeiten und laden kann).
Ich denke es mir so:
Die ShortCuts werden ja eh schon intern in einer Liste gespeichert (Type word bzw TIDEMacro oder so ähnlich).
Man definiertDann bräuchte man nur noch eine Hauptmakro-Datei "Macro.mak", in die werden jedesmal bei Shift^R,(Shift^)R am Ende des Recording die intern gespeicherten Makros zusammen mit den entsprechenden Makro-Namen gespeichert.Code: Alles auswählen
type MacroItem = record macroNr:word; macroName:string; end; type TMacrItemList = class(TList); //Liste der MacroItem, vielleicht einfacher array of Macroitem?
Ja das waere etwas. Ist aber weit mehr Arbeit als es klingt!Diese Haupt-MakroDatei kann man (mit Shift^R,E) editieren (sie enthält die Liste der MacoItems in der Reihenfolge, wie sie beim Abspielen gelesen werden), mit anderem Namen abspeichern (*.mak), nach Macro.mak kopieren, an andere Makrodatei anhängen, löschen etc.
Sobald diese Datai Macro.mak geändert wurde, werden automatisch die entsprechenden ShortCuts daraus gelesen und wieder intern gespeichert (wie sie bisher am Ende des Recording gespeichert sind).
So kann man bestimmte längere Makros, die man öfter braucht, unter einem passenden Namen abspeichern und bei Bedarf nach Macro.mak kopieren.
Zum Editieren dann noch ein MakroEditFenster,
- einerseits mit einer Liste der erstellten MakroDateien, durch Anklicken einer Datei wird sie zum Hauptmakro, mit Del löschen, die Datei Macro.mak selbet wird bei jedem neuen Recording wieder überschrieben,
- andererseits mit einer Editiermöglichkeit der Makroliste einer Datei (hinzufügen, löschen, verschieben von MacroItems).
Wäre das nicht etwas? Ich denke, das dürfte nicht allzu schwer zu implementieren sein.
Und...
Dein ursprüngliches Problem loest es NICHT
- sagen mir du hast ctrl-f verwendet. Wenn du jetzt den Makro abspielst, dann geht der dialog auf, und du musst return druecken.
- du editierst die Datei und fuegst ein return ein
Problem: das return wird an SynEdit gesendet. Nicht an den find-dialog. Du musst immernoch ok klicken, hast aber eine neue Zeile im Editor.
-
- Beiträge: 588
- Registriert: Mi 25. Mär 2009, 21:12
- OS, Lazarus, FPC: Laz trunk / fpc latest release / Win and other
- CPU-Target: mostly 32 bit
Re: Block markieren mit ^K, B und K - geht nicht
So jetzt geht das.martin_frb hat geschrieben: 2) Man koennte eine Art Feststell-function machen. Also ctrl-b start selection process (none persistent), Dann mueste man die shift Taste nicht halten, und alle caret Bewegungen würden den normalen Block erweitern.... bis zum naechsten ctrl-b (oder auch 2 verschiedene codes)
ctrl-k ctrl-s aktiviert "sticky block selection". Und setzt den Anfangspunkt fuer den block. (imaginäre dauer shift Taste drücken)
Danach kann man den cursor bewegen (Cursor keys (OHNE shift), goto bookmork, mouse (aber nur klick, nicht klick and move), ...) und die Selection erweitert sich automatisch zur neuen Cursor pos. (Als ob man die shift Taste dauer drückt.
ctrl-k ctrl-alt-s das selbe aber colums selection mode
ctrl-k ctrl-e Selektion beenden. (imaginäre dauer shift Taste loslassen)
Der sticky mode wird außerdem beendet wenn (may be subject to change):
- Text verändert wird, einfügen, löschen, ersetzen
- die normalen Selektion Kommandos genutzt werden
-- shift cursor
-- shift mouse click
-- mouse click AND move
-- mouse double click (select word)
-- ...
- Der Block anderweitig gesetzt wird:
-- Suche
-- inkrementelle Suche
-- find mext/prev word occurence
-- ...
Im Macro empfehle ich:
- Cursor zum Endpunkt, set bookmark
- Cursor zum Startpunkt
- ctrl-k ctrl-s
- goto bookmark
- ctrl-k ctrl-e
-
- Beiträge: 244
- Registriert: Do 21. Jan 2010, 22:33
- OS, Lazarus, FPC: Windows Vista (L 0.9.31 FPC 2.5.1)
- CPU-Target: 32Bit
- Wohnort: z.z. Brasilien, sonst 82335 Berg-Leoni (südlich von München)
Re: Block markieren mit ^K, B und K - geht nicht
Lieber Martin,
das mit der "sticky block selection" hat sich wohl doch nicht durchgesetzt. Jedenfalls ist in der neuesten Lazarus-version davon nichts mehr vorhanden.
Meiner Meinung wäre das einfachste: einen Toggle-Shortcut für Block persistent AN/AUS. Dann kann man damit beliebig jonglieren und muß nicht jedes mal erst die Einstellungen öffnen um das zu aktivieren/deaktivieren.
Außerdem wäre praktisch, schon gleich zu implementieren:
Ctr-Alt-Shift-0..9 = Setze Marker 0..9
herzliche Grüße!
P. Nikolaus
das mit der "sticky block selection" hat sich wohl doch nicht durchgesetzt. Jedenfalls ist in der neuesten Lazarus-version davon nichts mehr vorhanden.
Meiner Meinung wäre das einfachste: einen Toggle-Shortcut für Block persistent AN/AUS. Dann kann man damit beliebig jonglieren und muß nicht jedes mal erst die Einstellungen öffnen um das zu aktivieren/deaktivieren.
Außerdem wäre praktisch, schon gleich zu implementieren:
Ctr-Alt-Shift-0..9 = Setze Marker 0..9
herzliche Grüße!
P. Nikolaus
-
- Beiträge: 588
- Registriert: Mi 25. Mär 2009, 21:12
- OS, Lazarus, FPC: Laz trunk / fpc latest release / Win and other
- CPU-Target: mostly 32 bit
Re: Block markieren mit ^K, B und K - geht nicht
Bei mir ist das noch vorhanden. Allerdings, nur trunk (1.1).br_klaus hat geschrieben:Lieber Martin,
das mit der "sticky block selection" hat sich wohl doch nicht durchgesetzt. Jedenfalls ist in der neuesten Lazarus-version davon nichts mehr vorhanden.
Im 0.9.31 FIXES branch ist das nicht (und war es nie). Der 0.9.31 ist seit 2 Monaten "Feature komplett". D.h. nur Bug fixes.
Das heisst, es wird auch nicht in die 1.0 gehen.
Ich bin auch nicht sicher, ob in allen Keymappings ne Vorbelegung existiert. e.g bei Classic/Mac muss man ggf selber nen Shortcut zuweisen
Ist auch ne Idee. Genauso wie ^K^B / ^K^K koennte auch im nicht "persistent block Mode" einen persistenten block erzwingen (der bleibt, bis eine andere block Operation erfolgt...)Meiner Meinung wäre das einfachste: einen Toggle-Shortcut für Block persistent AN/AUS. Dann kann man damit beliebig jonglieren und muß nicht jedes mal erst die Einstellungen öffnen um das zu aktivieren/deaktivieren.
Aber ich sah das erst mal als weniger wichtig, da sich doch mit dem sticky Mode (wenn er laeuft), alles fuer die Makros benoetigte machen laesst, oder?
Ja, eventuell braucht es mal nen Tasten-Anschlag mehr...
"Setze Marker" (anstatt "toggle") gibt es doch schon. Du musst nur die Key bindings setzenAußerdem wäre praktisch, schon gleich zu implementieren:
Ctr-Alt-Shift-0..9 = Setze Marker 0..9